Я пытаюсь настроить следующие таблицы с помощью JPA/Hibernate:
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();
}
...
}
Когда я пытаюсь запустить его, я получаю org.hibernate.PersistentObjectException: удаленный объект, переданный для сохранения: User
Я также попытался использовать следующий код в моем классе Validation:
public void setUserId(Long userId)
{
this.userId = userId;
}
и когда я создаю код проверки, я просто делаю:
Validation validation = new Validation();
validation.setUserId(userId);
em.persist(validation);
tx.commit();
Но тогда, когда пользователь имеет значение null, я получаю org.hibernate.PropertyValueException: свойство not-null ссылается на значение null или переходное: User.code
Порадовал бы любую помощь относительно того, как лучше всего решить эту проблему!