我正在创建一个简单的实体,并尝试将其持久化到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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的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();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行该程序时,我得到了一个异常:
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)
Run Code Online (Sandbox Code Playgroud)
请帮助我在此代码中出错的地方。我在用Hibernate-4.3.6
更新:这是我的休眠配置文件,该表由休眠本身生成:
<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>
Run Code Online (Sandbox Code Playgroud)
另外,如果可能的话,请给我推荐一个Hibernate-4.3的很好的资源,因为在线文档对于像我这样的初学者来说不是一个很好的资源。
完整的错误文本是:
引起原因:org.hibernate.AnnotationException:无法在表 TBL_FLIGHT 上创建唯一键约束(comp_prefix、flight_number):未找到数据库列“comp_prefix”、“flight_number”。确保使用正确的列名称,这取决于所使用的命名策略(它可能与实体中的属性名称不同,尤其是对于关系类型)
您很可能拼错了其中一个列名称。
| 归档时间: |
|
| 查看次数: |
3936 次 |
| 最近记录: |