我想要使用的数据库是:
用户表: 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)
...
我使用的hibernate版本是:
<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事情有问题,但无法确认或进一步调试..还是其他什么?
答案 0 :(得分:0)
要改变的一些事情:
1)从班级名称中删除下划线(&#34; _&#34;)&#39;属性。尝试关注Java Beans naming conventions。这很重要,因为Hibernate期望这种类型的命名,以便调用类&#39;公共访问者和变异者(又名getter&amp; setters)。
2)UserAction
需要自己的标识符属性。所述属性应该使用@Id
注释其getter。您目前已注明UserAction
_user
属性@Id
,这无疑会导致问题。 UserAction
将拥有自己的主键,并且User
的ID为外键。
3)考虑将“一对一”关系更改为“一对多”。不应允许User
执行多个UserAction
吗?