Here is my sample Entity
@Entity
@Table (name = "company"})
public class Company implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private long id;
@NotNull
@Column (name = "name", nullable = false, unique = true)
private String name;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "company_contact",
joinColumns = { @JoinColumn(name = "companyId") },
inverseJoinColumns = { @JoinColumn(name = "contactId") })
private List<Contact> contacts;
}
@Entity
@Table (name = "contact")
public class Contact implements Serializable {
/**
*
*/
private static final long serialVersionUID = 637603479937829299L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = Contact.COLUMN_ID, unique = true, nullable = false)
private long id;
@Column(name = Contact.COLUMN_NAME, unique = true)
private String name;
}
现在,当我尝试保存此对象时,该对象的名称属性具有相同的值。 Hibernate抛出唯一约束异常,一旦保存同一个对象,hibernate抛出批量更新失败异常,因为hibernate设置的id不会被删除。
答案 0 :(得分:0)
我想您正在尝试保存包含联系人列表的公司,这两个对象的名称都相同,即您的公司名称为“ Jose”,联系人的名称为“ Jose”?
这不是问题,因为我们谈论的是两个不同的表(公司<>联系人),请检查您的数据库是否已有此实体。
因此请检查两次,如果仍然有问题,请放入整个异常堆栈跟踪以及您要执行的操作(但代码段)。
答案 1 :(得分:-2)
如果保存两个具有相同名称的对象,则抛出此异常
改变这个:
@Column (name = "name", nullable = false, unique = true)
private String name;
到此:
@Column (name = "name", nullable = false)
private String name;