Hibernate将ID设置为空
我有一个问题,Hibernate会重置实体的ID,即使我显式地设置了它们 以下是我的两个实体:Hibernate将ID设置为空,hibernate,jakarta-ee,jpa,Hibernate,Jakarta Ee,Jpa,我有一个问题,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="
@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;
}
}
当我使用EntityManager::persist分配的两个DealersCard创建游戏实例时,对象在数据库中正确创建,我可以稍后检索它们,但如果检索到游戏实例,请添加另一个DealersCard实例,并尝试使用EntityManager::merge,Hibernate更新数据库,因为某些原因,将令牌字段设置为null,id设置为0,然后我得到
javax.persistence.PersistenceException:
org.hibernate.exception.ConstraintViolationException:错误:null
列“token”中的值违反非空约束详细信息:失败
行包含(null,0)
我尝试了MySQL和PostgreSQL,但仍然遇到相同的错误。我正在运行Glassfish 3.1.2.2、Hibernate实体管理器4.1.2和JavaEE6
感谢您的帮助
谢谢 我不相信您的映射是正确的。您可能应该:
@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL}, mappedBy = "game")
private Set<DealersCard>
然后从many端删除token字段,只需要一个整数,即@Id
确保在向集合中添加新的DealerCard时,在每一张上都设置了游戏,并将其添加到集合中。我不确定您的映射是否完全正确。您可能应该:
@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL}, mappedBy = "game")
private Set<DealersCard>
然后从many端删除token字段,只需要一个整数,即@Id
确保在向集合中添加新的DealerCard时,您在每一张上都设置了游戏,并将其添加到集合中。您完全正确-问题在于映射。谢谢你完全正确-问题在于映射。谢谢
@ManyToOne
@JoinColumn(name="token")
private Game game;