我尝试使用Hibernate创建一对一映射。当我实现DAO方法时,我收到以下错误:
org.hibernate.AnnotationException: Unknown mappedBy in: com.User.userData, referenced property unknown: com.UserData.user
java.lang.NullPointerException
为什么我收到此错误?
我的代码如下:
对于用户实体代码:
@Entity
@Table(name = "user")
public class User implements Serializable {
@Id
@GeneratedValue
@Column(name = "userid")
int userID;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
UserData userData;
...
}
对于UserData实体代码:
@Entity
@Table(name = "UserData")
public class UserData {
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "user"))
int userID;
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
User user;
答案 0 :(得分:0)
将mappedBy=user
更改为mappedBy=userID
。那应该可以解决你的问题。
虽然奇怪的是你试图做一对一的双向,但这似乎只需要单向。双向关系意味着您可以从UserDetails对象内部访问您的User对象,反之亦然,但我认为您只需要从User对象内部访问UserDetails对象,而不是相反。
此外,您无需指定FetchType.LAZY,这是默认选项。
如果要将其更改为单向一对一,只需将User类更改为:
@OneToOne
@PrimaryKeyJoinColumn
private UserData userData
并省略UserData类中对User的所有引用。
如果这不能解决您的问题,请告诉我