Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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 休眠一对多更新跳过唯一约束检查_Java_Hibernate_Jpa - Fatal编程技术网

Java 休眠一对多更新跳过唯一约束检查

Java 休眠一对多更新跳过唯一约束检查,java,hibernate,jpa,Java,Hibernate,Jpa,我正在做一个项目,我需要用关键字保存下载文件信息。 典型的一对多场景,对吗?一个下载记录到多个下载关键字关系记录 下面是Download.java的样子 @Entity @Table(name = "downloads", catalog = "nbpx") public class Download extends BaseEntity implements Serializable { public Integer downloadId; public String title; p

我正在做一个项目,我需要用关键字保存下载文件信息。 典型的一对多场景,对吗?一个下载记录到多个下载关键字关系记录

下面是Download.java的样子

    @Entity
@Table(name = "downloads", catalog = "nbpx")
public class Download extends BaseEntity implements Serializable {
public Integer downloadId;
public String title;
public Set<DownloadKeyword> downloadKeywords = new HashSet<DownloadKeyword>(
        0);
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "downloadId", unique = true, nullable = false)
public Integer getDownloadId() {
    return downloadId;
}


public void setDownloadId(Integer downloadId) {
    this.downloadId = downloadId;
}


public String getTitle() {
    return title;
}


public void setTitle(String title) {
    this.title = title;
}

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "download")
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
public Set<DownloadKeyword> getDownloadKeywords() {
    return downloadKeywords;
}

public void setDownloadKeywords(Set<DownloadKeyword> downloadKeywords) {
    this.downloadKeywords = downloadKeywords;
}
    }
保存下载实体时,我希望看到所有下载关键字关系实体都保存在下载实体保存会话中。我需要避免下载关键字关系表中的重复。但每次我保存它时,关系记录都直接插入到数据库中,而不使用JPA注释检查重复


所以我的问题是:当实体在一对多保存或更新会话中保存时,JPA注释的多列uniqueConstraints是否被忽略?

uniqueConstraints仅用于表生成支持。 看

由于您已经在下载类中使用了
Set
,您可以在DownloadKeyword类中实现hashCodeequals方法(包括主键downloadKeywordId关键字ID属性)去完成你想要的

但是,我仍然更喜欢复合键方法

@Entity
@Table(name = "downloadkeywords", catalog = "nbpx", uniqueConstraints =
       @UniqueConstraint(columnNames = {"keywordId", "downloadId" }))
public class DownloadKeyword extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
public Integer downloadKeywordId;
public Download download;
public Integer keywordId;
    @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "downloadKeywordId", unique = true, nullable = false)
public Integer getDownloadKeywordId() {
    return downloadKeywordId;
}

public void setDownloadKeywordId(Integer downloadKeywordId) {
    this.downloadKeywordId = downloadKeywordId;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "downloadId", nullable = false, insertable=true)
public Download getDownload() {
    return download;
}

public void setDownload(Download download) {
    this.download = download;
}

public Integer getKeywordId() {
    return keywordId;
}

public void setKeywordId(Integer keywordId) {
    this.keywordId = keywordId;
}
}