【发布时间】:2014-08-09 18:52:45
【问题描述】:
我正在创建一个简单的实体并尝试将其持久化到 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 对于像我这样的初学者来说不是一个好资源。
【问题讨论】:
-
能否请您发布您的表的 DDL?
-
@Teh,我已经配置 hibernate 在我运行程序时为我生成表,我已经将 hibernate.cfg.xml 文件添加到我的帖子中,请检查。