java - 无法创建唯一键约束

标签 java hibernate

我正在创建一个简单的实体并尝试将其保存到 Oracle 数据库中。这是我的实体:

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

@Entity
@Table(name = "TBL_FLIGHT", uniqueConstraints = @UniqueConstraint(name = "flight_number", columnNames = {
        "comp_prefix", "flight_number" }))
public class Flight implements Serializable {
    @Id 
    private Long id;
    private String companyPrefix;
    private String number;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setCompanyPrefix(String companyPrefix) {
        this.companyPrefix = companyPrefix;
    }

    public void setNumber(String number) {
        this.number = number;
    }   

    @Column(name = "comp_prefix")
    public String getCompanyPrefix() {
        return companyPrefix;
    }

    @Column(name = "flight_number")
    public String getNumber() {
        return number;
    }
}

这是我的 Java 类,它创建了该实体的实例并使用 Hibernate 将其保存到数据库:

public class AppTest{

    public static void main(String[] args) {

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        Flight flight = new Flight();
        flight.setCompanyPrefix("prefix");;
        flight.setNumber("100");
        flight.setId(1L);
        session.save(flight);

        session.getTransaction().commit();          

        HibernateUtil.getSessionFactory().close();
    }
}

当我运行这个程序时,我得到一个异常:

Caused by: org.hibernate.AnnotationException: Unable to create unique key constraint (comp_prefix, flight_number) on table TBL_FLIGHT: database column 'comp_prefix', 'flight_number' not found. Make sure that you use the correct column name which depends on the naming strategy in use (it may not be the same as the property name in the entity, especially for relational types)
    at org.hibernate.cfg.Configuration.buildUniqueKeyFromColumnNames(Configuration.java:1682)
    at org.hibernate.cfg.Configuration.buildUniqueKeyFromColumnNames(Configuration.java:1614)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1450)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)

请帮助我在这段代码中出错的地方。我正在使用 Hibernate-4.3.6

更新:这是我的 hibernate 配置文件,该表由 hibernate 本身生成:

<session-factory>

    <!-- Database connection settings -->
    <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.username">myuser</property>
    <property name="hibernate.connection.password">mypasswd</property>
    <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>

    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">update</property>

    <mapping class="org.hibernate.tutorial.Flight" />
</session-factory>

另外,如果可能的话,请给我推荐一个 Hibernate-4.3 的好资源,因为 online document对于像我这样的初学者来说不是一个好的资源。

最佳答案

我有同样的错误,通过显式设置 @Column(name = "field_name") 解决了 @UniqueConstraint 中使用的属性。

关于java - 无法创建唯一键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25221929/

相关文章:

java - 无法显示图像图标

java - 如何验证字符串数组中的用户输入?

java - 正在加载重复的 Spring 配置?

java - 如何在 Hibernate 中使用临时表批量删除记录?

java - hibernate native 查询,计数

java - 如何绕过 fragment 类中的静态引用?

java - 为什么 MxBean 中的堆使用与堆转储中的不同?

java - HQL查询复杂DTO

java - Spring Boot JPA CrudRepository 如何设置可选搜索参数

java - 使用 EclipseLink 在 @MappedSuperclass 基类上使用 @ElementCollection 和 @CollectionTable