У меня проблема, когда Hibernate сбрасывает идентификаторы для объектов, хотя я их явно устанавливаю.Hibernate устанавливает ID в нуль
Вот мои две сущности:
@Entity
@Table(name="game")
public class Game implements Serializable {
private String token;
private Set<DealersCard> dealersCards;
@Id
@Size(min=36, max=36)
@Column(name="token")
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL})
public Set<DealersCard> getDealersCards() {
return dealersCards;
}
public void setDealersCards(Set<DealersCard> dealersCards) {
this.dealersCards = dealersCards;
}
}
и
@Entity
@Table(name="dealers_card")
public class DealersCard implements Serializable {
private String token;
private int id;
public void setVisible(boolean visible) {
this.visible = visible;
}
@ManyToOne
@MapsId("token")
@JoinColumn(name="token", referencedColumnName="token")
public Game getGame() {
return game;
}
public void setGame(Game game) {
this.game = game;
}
@Id
@Size(min = 36, max = 36)
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Когда я создаю экземпляр игры с двумя DealersCard присвоенного через EntityManager :: сохраняются объекты создаются в базе данных правильно и я могу получить их позже, но если я извлечу экземпляр игры, добавьте еще один экземпляр DealersCard и попытайтесь обновить базу данных с помощью EntityManager :: merge, Hibernate, по какой-либо причине, установите поле токена равным null, а id - 0 и Я получаю
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: ERROR: null value in column "token" violates not-null constraint Detail: Failing row contains (null, 0).
Я пробовал MySQL и PostgreSQL, но я все еще сталкиваюсь с той же ошибкой. Я запускаю Glassfish 3.1.2.2, Hibernate Entity Manager 4.1.2, Java EE 6.
Любая помощь приветствуется.
Спасибо!
Вы были абсолютно правы - проблема была в сопоставлениях. Благодаря! – Martynas