[英]OneToOne in Hibernate - Unknown “mappedBy”
我正在休眠狀態下鍛煉,但自實施幾個小時以來一直失敗。 我在stackoverflow上閱讀了很多答案,並經歷了2個教程(mkyong和其他一些家伙),但是我不明白我在做什么。
我嘗試了很多事情,但是我總是org.hibernate.AnnotationException: Unknown mappedBy in: ch.myapp.model.Employee.office, referenced property unknown: ch.myapp.model.Office.EMPLOYEES
相同的異常( org.hibernate.AnnotationException: Unknown mappedBy in: ch.myapp.model.Employee.office, referenced property unknown: ch.myapp.model.Office.EMPLOYEES
)
如果有人能給我提示問題出在哪里,我將非常高興。
我正在使用此數據庫方案,並且嘗試在Office和Employee之間實現1:1(我知道這沒有多大意義)。
員工班
@Entity
@Table(name = "EMPLOYEES")
public class Employee {
@Id
@GeneratedValue
@Column(name = "EMPLOYEENUMBER")
private Integer employeeNumber;
@Column(name = "FIRSTNAME")
private String firstName;
@Column(name = "LASTNAME")
private String lastName;
@Column(name = "EXTENSION")
private String extension;
@Column(name = "EMAIL")
private String email;
@Column(name = "JOBTITLE")
private String jobTitle;
@Column(name = "OFFICECODE")
private String officeCode;
// ACHTUNG, Test "EmployeeDataAccesTest -> loadEmployee()" greift auf einen
// Null-Wert zurück. Null kann keinem primitiven Wert zugeordnet werden.
@Column(name = "REPORTSTO")
private Integer reportsto;
@OneToOne(mappedBy = "EMPLOYEES", fetch = FetchType.EAGER)
private Office office;
//Getters and setters without annotations...
}
辦公室類
@Entity
@Table(name = "OFFICES")
public class Office {
@Id
@Column(name = "OFFICECODE")
private String officeCode;
@Column(name = "CITY")
private String city;
@Column(name = "PHONE")
private String phone;
@Column(name = "ADDRESSLINE1")
private String addressLine1;
@Column(name = "ADDRESSLINE2")
private String addressLine2;
@Column(name = "STATE")
private String state;
@Column(name = "COUNTRY")
private String country;
@Column(name = "POSTALCODE")
private String postalCode;
@Column(name = "TERRITORY")
private String territory;
@OneToOne
@JoinColumn(name = "OFFICECODE")
private Employee employee;
//Getters and setters without annotations...
}
Hibernate.cfg.xml:
l version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
<property name="hibernate.connection.driver_class">org.apache.derby.jdbc.EmbeddedDriver</property>
<property name="hibernate.connection.url">jdbc:derby:/home/dev/dev/git/TestBusiness/myDB</property>
<property name="hibernate.connection.username"></property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<mapping class="ch.myapp.model.Office"/>
<mapping class="ch.myapp.model.Employee"/>
</session-factory>
</hibernate-configuration>
這是我得到的Stacktrace(前幾行):
org.hibernate.AnnotationException: Unknown mappedBy in: ch.myapp.model.Employee.office, referenced property unknown: ch.myapp.model.Office.EMPLOYEES
at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:154)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1659)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1634)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
at ch.myapp.HibernateManager.getSessionFactory(HibernateManager.java:44)
at ch.myapp.HibernateManager.openCurrentSessionwithTransaction(HibernateManager.java:24)
at ch.myapp.dataaccess.EmployeeDataAccess.load(EmployeeDataAccess.java:18)
at ch.myapp.dataaccess.OfficeDataAccessTest.shouldLoadOffice(OfficeDataAccessTest.java:24)
您在Employee.class中的mapBy值錯誤,應為以下內容:
@OneToOne(mappedBy = "employee", fetch = FetchType.EAGER)
private Office office;
1.確保屬性如下:
@OneToOne(mappedBy = "employee", fetch = FetchType.EAGER)
private Office office;
確保吸氣劑如下:
public Office getOffice() { return office; }
mappingBy批注引用屬性名稱,而不是列名稱。 另外,由於屬性是私有的,所以休眠通過其getter / setter訪問它們,因此您需要遵循約定(get,Camel Case等)。
mappedBy
的值必須與引用類(包括大小寫)中的屬性名稱相同。
例如,
如果該屬性的名稱為employee
,則必須准確地編寫employee
。
如果該屬性的名稱為employeE
,則必須准確地編寫employeE
。
(getter函數的名稱正確)
檢查您的兩個實體是否都在persistence.xml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.