【发布时间】:2013-02-18 23:27:35
【问题描述】:
我有一个问题,即即使我明确设置了实体 ID,Hibernate 也会重置它们。
这是我的两个实体:
@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 更新数据库,Hibernate 出于某种原因,将 token 字段设置为 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。
感谢任何帮助。
谢谢!
【问题讨论】:
标签: hibernate jakarta-ee jpa