我有一个问题,即使我明确设置了实体,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;
}
}
当我使用通过 EntityManager::persist 分配的两个 DealersCard 创建 Game 的实例时,对象会在数据库中正确创建,我可以稍后检索它们,但是如果我检索 Game 的实例,请添加 DealersCard 的另一个实例并尝试更新具有 EntityManager::merge 的数据库,休眠,出于某种原因,将令牌字段设置为 null 并将 id 设置为 0,我得到
javax.persistence.PersistenceException:org.hibernate.exception.ConstraintViolationException:错误:“令牌”列中的空值违反非空约束详细信息:失败行包含(null,0)。
我尝试了 MySQL 和 PostgreSQL,但仍然遇到同样的错误。我正在运行 Glassfish 3.1.2.2、Hibernate Entity Manager 4.1.2、Java EE 6。
任何帮助表示赞赏。
谢谢!