我收到这个错误很多,当我尝试将对象插入mySQL数据库中的表时,我的hibernate表现得很奇怪。
okt. 06, 2015 9:57:28 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1062, SQLState: 23000
okt. 06, 2015 9:57:28 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Duplicate entry '77' for key 'UK_2gy9x2d1hqmk0d77o8ux44c6o'
okt. 06, 2015 9:57:28 PM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
org.hibernate.exception.ConstraintViolationException: could not execute statement
当我查看MySQL的WOrkbench时,我可以看到,无论何时我持久化或合并,我都会在数据库表中获得重复的行。
我使用这两种方法来持久化和合并:
public void persist(Object entity) {
session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.persist(entity);
session.flush();
session.getTransaction().commit();
}
public void merge(Object entity) {
session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.merge(entity);
session.flush();
session.getTransaction().commit();
}
我的用户类有一个带注释类的ManyToMany。
@ManyToMany( fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST } )
@JoinTable(
name = "user_note",
joinColumns = {@JoinColumn(name = "empId")},
inverseJoinColumns = {@JoinColumn(name = "note_id")})
private Set<Note> bookmarks = new HashSet<>();
请注意:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long projectId;
和第三个与注释具有OneToMany关系的类。
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
@JoinTable(name = "organisation_note", joinColumns = { @JoinColumn(name = "OrganisationId") }, inverseJoinColumns = { @JoinColumn(name = "note_id") })
private Set<Note> bookmarks = new HashSet<>();
我一直在四处寻找,似乎无法找到数据库中重复行的任何主题。第一个持久化不会复制该行,但第二个将继续,第三个将抛出异常。在那之后,每次我尝试坚持之后它都是例外。哪个不可靠。任何意见都表示赞赏。