org.springframework.dao.InvalidDataAccessResourceUsageException: could not insert: [model.User]; SQL [insert into users (name) values (?) select scope_identity()]; nested exception is org.hibernate.exception.SQLGrammarException: could not insert: [model.User]
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:629)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
users表两个字段id和name 主键用了触发器 insert into users(name) values('z') 可以插入
java代码不能插入
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
哪错了?mysql没问题
那怎么让他自动生成呢?代码插入数据的时候不管id
追答如果用Hibernate,也不用触发器生成主键值吧。直接配置为自增长,并提供sequence名就可以了。如:
SEQ_RZB
用JAVA代码,则必须先获取sequence.nextval到变量中,再和其它属性数据一起new一个重载后的POJO类。之后调用HibernateBaseDAO的attachDirty()(好像是这个),进行保存。这里前提是刚刚获取的主键值没有被另一个人先行插入到表中。
啥意思?sql:
create sequence user_sequence minvalue 1 nomaxvalue
increment by 1
start with 1;
create or replace trigger dectuser_user
before insert on users
for each row
begin
select user_sequence.nextval into :new.id from dual;
end;
你的sql在oracle里能运行的通么
追问能 ,insert into users(name) values('zhang')没问题
oracle主键用了自增,插入不了
JAVA代码里如果不显示提供主键值,自然是无法插入的。当然前提是你还得有自己的构造函数。Hibernate设置的主键生成器,能在save(instance)时自动加上相关的主键值。自己直接写JAVA,目的就是要增强可控性(比如直接插入主键=10000000的记录),自然得手工提供主键值了,Hibernate可管不着。你的触发器里面产生...
用oracle数据库增加一条数据记录的时候,主键 是设置自动获取的,增加其 ...
报这个错误就是明确的告诉你:Customer_id是主键,不允许为空,也没有设置为设置自动置值。你把建这个表的脚本(包含触发器)在这里贴出看看。肯定这里有问题。
oracle设置id自增,报ora-00955错误,代码如下:
估计是ID是保留字的原因。CREATE SEQUENCE seq_d_user Oracle的id自增方法:比如表名:tab,主键为:id 1. 增加一个序列号: create sequence seq_tab 2. 增加一个触发器,如果是insert,则取序列号值,赋予主键列 CREATE OR REPLACE TRIGGER TRI_tab BEFORE INSERT ONtabFOR EACH ROW DECLARE ...
oracle中如何设置主键并且让其自动增长
由于oracle中是没有自动增长的的,需要自己去进行写触发器等方式去进行设置:找了一下他人写的,有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列。一、自增长主键我创建一个用户的信息表-- Create tablecreate table USERINFO( USERNO NUMBER not null, USERNAME NVARCHAR2(20), USE...
Oracle中SELECT TableName .nextval FROM DUAL 生成的主键怎么会是数据...
你可以先建一个序列 再建个触发器 触发器 create trigger 名 before insert on 表名 for each row begin select 序列名.nextval into :new.表列名 from dual;end 这样就OK了
为什么ORACLE中插入数据时出现错误?
手动插入数据报错:解决方法:1、使用sql查询主键的唯一约束当前最大值:select max(id) from table;(id为number类型)select max(to_number(id)) from table;(id为非number类型)2、使用sql查询该表的序列的下一个值 select SEQ.NEXTVAL from dual;(seq是对应表的序列名)3、最后使用PL\/SQL...
在Oracle 中设置自增列
在Oracle中使用序列和触发器实现自增列有一些需要注意的点。例如,插入指定ID值时,序列会从该值的下一个开始继续递增,但需要注意,如果序列值达到最大限制(如1000),且允许ID重复,则可能会出现值重复问题。如果将ID设置为主键,使用序列和触发器时,一旦序列值达到最大值,且不允许ID重复,插入数据...
oracle数据库,主键设置为ID,插入语句时,如何自动生成ID并让它顺序增加...
使用oracle数据库中的关键字sequence来实现目的。\/\/创建mySeq create sequence mySeqstart with 1increment by 2maxvalue 40minvalue 1cycle \/\/创建用户表 create table USER(Id int,CompName varchar2(20))插入语句可以这样写:insert into USER values(mySeq.nextVal,'AA')这样的话每次插入的ID就是...
oracle 如果存在主键则更新(update),否则添加新纪录(insert)怎么写...
可以用merge语句。给你举个例子 CREATE OR REPLACE PROCEDURE test (in_deptno IN NUMBER, in_dname IN VARCHAR2, in_loc IN VARCHAR2)AS t_record scott.dept%ROWTYPE;BEGIN SELECT in_deptno, in_dname, in_loc INTO t_record FROM DUAL;---用merge语句 MERGE I...
oracle的主键要设置默认值为自动递增,怎么处理?
Oracle 不直接支持 自动递增的列。需要创建一个序列 SEQUENCE。又由于无法在列的默认值那里,设置默认值为序列。因此只能通过触发器来设置。设置好触发器以后,所有的插入语句,将忽略外部传入的 id 数据,只使用指定的序列号来产生。SQL> CREATE SEQUENCE test_sequence2 2 increment by 1 -- 每...