2014-11-04 62 views
0

我想使用DB是一樣的東西:休眠:使用其他實體的PK爲PK提供了org.hibernate.MappingException:無法確定類型的錯誤

用戶表: USER_ID ...

User_Action表: USER_ID(FK到User.User_ID,應該是一個一對一的映射) ...

所以我有這個類:

@Entity 
@Table(name="User") 
public class User { 

private long _ID; 
@Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "User_ID", nullable = false, unique = true) 
    public long get_ID() { 
     return _ID; 
    } 

    public void set_ID(long user_ID) { 
     _ID = user_ID; 
    } 
... 
} 

,並在另一個類,我有:

@Entity 
@Table(name="User_Action") 
public class UserAction implements IEntity { 

    private User _user; 
    @Id 
    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "User_ID") 
    public User get_user() { 
     return _user; 
    } 
    public void set_user(User _user) { 
     this._user = _user; 
    } 
... 
} 

但是運行代碼拋出在初始化的時候出現以下錯誤:

org.hibernate.MappingException: Could not determine type for: mycustom.User, for columns: [org.hibernate.mapping.Column(_user)] 
org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266) 
org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253) 
org.hibernate.mapping.RootClass.validate(RootClass.java:193) 
org.hibernate.cfg.Configuration.validate(Configuration.java:1099) 
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1284) 
org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859) 

... 

我使用的休眠版本:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.6.7.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.3.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>3.3.0.ga</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.3.1.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.3.2.GA</version> 
    </dependency> 

我懷疑annoticationConfiguration的東西有問題,但無法確認它或進一步調試..或者是別的東西?

+1

您使用Id註釋標註了您的User屬性。但是該註釋只能應用於某些類型(詳情請參閱:http://docs.oracle.com/javaee/6/api/javax/persistence/Id.html)。如果你想使用實體作爲另一個實體的PK,看看這個SO帖子:http://stackoverflow.com/questions/904634/using-an-entity-and-their-primary-key-as-another-實體來說-ID。 – 2014-11-04 21:03:53

回答

0

有幾件事情改變:

1)消除下劃線(「_」)從你的類的屬性的名稱。嘗試按照Java Beans naming conventions。這很重要,因爲Hibernate需要這種類型的命名才能調用類的公共訪問器和增變器(又稱爲getters & setter)。

2)UserAction需要它自己的標識符屬性。該物業應該用@Id註明其吸氣劑。您目前已註明UserAction_user財產與@Id,這無疑會造成問題。 UserAction將擁有自己的主鍵,並將User的ID作爲外鍵。

3)考慮將One-to-One關係更改爲一對多關係。 User不應該被允許執行多個UserAction

+0

感謝您的回覆。只是爲了跟進它:2)UserAction正在使用外鍵作爲它的主鍵,但我不知道如何在類中表示這個,所以我在UserAction中爲_user留下了@id。所以問題來了,如何在休眠中做超級事物? 3)是的,這確實是一對多的,我只是用1-1來保持簡單,因爲這與問題相關。 – jamesdeath123 2014-11-05 15:19:29

相關問題