Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate在保存对象时不会回滚生成的Id 这是我的示例实体 @实体 @表(name=“company”}) 公共类公司实现可序列化{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=“id”,unique=true,nullable=false) 私人长id; @NotNull @列(name=“name”,nullable=false,unique=true) 私有字符串名称; @ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL) @JoinTable(name=“公司\联系人”, joinColumns={@JoinColumn(name=“companyId”)}, inverseJoinColumns={@JoinColumn(name=“contactId”)} 私人名单联系人; } @实体 @表(name=“contact”) 公共类联系人实现可序列化{ /** * */ 私有静态最终长serialVersionUID=637603479937829299L; @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=Contact.Column\u ID,unique=true,nullable=false) 私人长id; @列(name=Contact.Column\u name,unique=true) 私有字符串名称; }_Java_Hibernate_Jdbc - Fatal编程技术网

Java Hibernate在保存对象时不会回滚生成的Id 这是我的示例实体 @实体 @表(name=“company”}) 公共类公司实现可序列化{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=“id”,unique=true,nullable=false) 私人长id; @NotNull @列(name=“name”,nullable=false,unique=true) 私有字符串名称; @ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL) @JoinTable(name=“公司\联系人”, joinColumns={@JoinColumn(name=“companyId”)}, inverseJoinColumns={@JoinColumn(name=“contactId”)} 私人名单联系人; } @实体 @表(name=“contact”) 公共类联系人实现可序列化{ /** * */ 私有静态最终长serialVersionUID=637603479937829299L; @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=Contact.Column\u ID,unique=true,nullable=false) 私人长id; @列(name=Contact.Column\u name,unique=true) 私有字符串名称; }

Java Hibernate在保存对象时不会回滚生成的Id 这是我的示例实体 @实体 @表(name=“company”}) 公共类公司实现可序列化{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=“id”,unique=true,nullable=false) 私人长id; @NotNull @列(name=“name”,nullable=false,unique=true) 私有字符串名称; @ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL) @JoinTable(name=“公司\联系人”, joinColumns={@JoinColumn(name=“companyId”)}, inverseJoinColumns={@JoinColumn(name=“contactId”)} 私人名单联系人; } @实体 @表(name=“contact”) 公共类联系人实现可序列化{ /** * */ 私有静态最终长serialVersionUID=637603479937829299L; @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=Contact.Column\u ID,unique=true,nullable=false) 私人长id; @列(name=Contact.Column\u name,unique=true) 私有字符串名称; },java,hibernate,jdbc,Java,Hibernate,Jdbc,现在,当我试图保存此对象时,两个对象的name属性值相同。Hibernate会引发唯一约束异常,并且在保存同一对象时,Hibernate会引发批处理更新失败异常,因为Hibernate为该对象设置的id未删除。如果保存两个同名对象,则会引发此异常 更改此项: Here is my sample Entity @Entity @Table (name = "company"}) public class Company implements Serializable { @Id

现在,当我试图保存此对象时,两个对象的name属性值相同。Hibernate会引发唯一约束异常,并且在保存同一对象时,Hibernate会引发批处理更新失败异常,因为Hibernate为该对象设置的id未删除。

如果保存两个同名对象,则会引发此异常

更改此项:

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;

}
为此:

@Column (name = "name", nullable = false, unique = true)
private String name;

我假设您正试图用联系人列表保存一个公司,两个对象都有相同的名称您指的是name=“Jose”的公司和name=“Jose”的联系人

这不是问题,因为我们讨论的是两个不同的表(公司联系人),检查您的数据库是否已经有此实体


因此,请检查两次,如果仍然存在问题,请将整个异常stacktrace和您试图执行的操作(但只是一段代码片段)。

能否提供一个代码示例,说明如何保存对象以及如何处理回滚?我认为这不是因为Hibernate,而是因为SQL ID Unique字段。在您的情况下,ID充当一个唯一的PK字段,请尝试在ID PK上设置自动递增。您可以向我们显示
联系人。COLUMN\u ID
联系人。COLUMN\u NAME
的值吗?除了前面的人所说的,您还可以发布完整的错误消息和stacktrace吗?这两个名称不在同一个表中
@Column (name = "name", nullable = false)
private String name;