Я пытаюсь настроить следующие таблицы с использованием 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();
}
...
}
Когда я пытаюсь запустить его, я получаю организацию.hibernate.PersistentObjectException: отдельная сущность передана для сохранения: Пользователь
Я также пытался использовать следующий код в своем классе проверки:
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 ссылается на нулевое или временное значение: User.code
Буду признателен за любую помощь относительно того, какчтобы лучше всего решить эту проблему!