我试图建立使用JPA /休眠下表:OneToOne与共享主键
User:
userid - PK
name
Validation:
userid - PK, FK(user)
code
可能有许多用户,每个用户可以拥有最多一个验证码或没有。
这里是我的课:
public class User
{
@Id
@Column(name = "userid")
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long userId;
@Column(name = "name", length = 50, unique = true, nullable = false)
protected String name;
...
}
public class Validation
{
@Id
@Column(name = "userid")
protected Long userId;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn(name = "userid", referencedColumnName = "userid")
protected User user;
@Column(name = "code", length = 10, unique = true, nullable = false)
protected String code;
...
public void setUser(User user)
{
this.user = user;
this.userId = user.getUserId();
}
...
}
我创建了一个用户,然后尝试使用下面的代码添加验证码:
public void addValidationCode(Long userId)
{
EntityManager em = createEntityManager();
EntityTransaction tx = em.getTransaction();
try
{
tx.begin();
// Fetch the user
User user = retrieveUserByID(userId);
Validation validation = new Validation();
validation.setUser(user);
em.persist(validation);
tx.commit();
}
...
}
当我尝试运行它,我得到一个组织。 hibernate.PersistentObjectException:传递给persist的分离实体:用户
我也尝试在我的验证类中使用以下代码:
public void setUserId(Long userId)
{
this.userId = userId;
}
,当我创建一个验证码,我只是做:
Validation validation = new Validation();
validation.setUserId(userId);
em.persist(validation);
tx.commit();
但后来因为用户是零,我得到org.hibernate.PropertyValueException:非空属性引用null或瞬时值:用户.code
希望有关如何最好地解决这个问题的任何帮助!
+1:这将是理想的。 – Jeremy 2011-04-27 14:18:09
如何在'setUser()'中设置'userId'字段? – Lu55 2015-09-25 12:09:09