插入数据时出现唯一约束错误

时间:2017-02-20 16:00:08

标签: java oracle hibernate

我收到奇怪的错误:执行我的下面代码时出现: java.sql.SQLIntegrityConstraintViolationException:ORA-00001:唯一约束

Product DAO.java

@Id
@Column(name = "no", columnDefinition = "NUMBER")
private int serial_number;
//No getter and setter for this field

@Column(name = "fname", columnDefinition = "VARCHAR2(50)")
private int fname;

@Column(name = "lname", columnDefinition = "VARCHAR2(50)")
private int lname;
// Getter and setter for fname and lname


ProductService.java

Product po = new Product();
po.setfname = "Tom";
po.setlname = "John";
//I am not setting 'no' field value since I have created sequence in my oracle table to auto increment the value. 

当我运行此代码时,我在字段'no'上遇到唯一约束错误。任何人都可以帮我识别我在代码中做错了什么。当我已经在表格中为'no'字段创建序列时,是否需要对配置文件或代码进行任何更改。由于它是生产数据库,我也不知道序列名称。

hibernate-cgf.xml
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
        <property name="hibernate.connection.password">pass</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
        <mapping class="dao.Product"></mapping>
    </session-factory>
</hibernate-configuration>

1 个答案:

答案 0 :(得分:2)

你的id字段serial_number是一个初始化为零的int,你的@Id映射不包含@GeneratedValue注释,因此hibernate会假设你手动分配id并在每次持久保存时将其保存为零对象,导致SQLIntegrityConstraintViolationException。您需要添加@GeneratedValue注释,您还可以选择策略,如下所示:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "no", columnDefinition = "NUMBER")
private int serial_number;