gpt4 book ai didi

java - ElementCollections 在父级的 id 上唯一,指定值

转载 作者:行者123 更新时间:2023-11-30 11:13:01 25 4
gpt4 key购买 nike

我有一个实例,我试图跟踪一个类别中的所有用户,用户可以在其中切换。例如,假设我有一个简单的实体类,如下所示。

@Entity
public class Photo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@ElementCollection(fetch=FetchType.LAZY)
List<User> flaggedUsers;
//Contains getters and setters
}

单个用户可能会标记 2 张照片,因此属于 2 个列表。理想情况下,我希望对主要 id 和用户的组合有一个独特的约束。我怎样才能做到这一点?

当第二个用户去标记图像时,此代码无法满足唯一性约束,因为唯一性是针对用户设置的,而不是用户/照片 ID 的组合。

我尝试使用@CollectionsTable,如下所示,但出现了所列的错误

@Entity
public class Photo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@ElementCollection(fetch=FetchType.LAZY)
@CollectionTable (name="photo_flagged_users", joinColumns=@JoinColumn(name="flaggedUsers"),uniqueConstraints = @UniqueConstraint(columnNames={"photo.id","flaggedUsers"}))

List<User> flaggedUsers;
//Contains getters and setters
}

在 Eclipse 中,@UniqueConstrants 是红色的,带有以下工具提示文本:

The value for annotation attribute CollectionTable.uniqueConstraints must be some @javax.persistence.UniqueConstraint annotation

最佳答案

我建议让您的 PhotoUser 实体之间没有关系,并引入一个中间层/表来适应这一点。假设这个新表名为 Photo_Users

照片 <-1..many-> Photos_Users <-many..1-> 用户

您还将引入唯一 key 作为可嵌入类:

@Embeddable
public class PhotosUsersEntityKey implements Serializable {

@Column(name="PROPERTY_ID", nullable=false)
private Integer userId;

@Column(name="BILL_ID", nullable=false)
private Integer photoId;

//getters+setters
}

和 PhotoUsersEntity:

@Entity
@Table(name="Photos_Users")
public class PhotosUsersEntity implements Serializable {

@EmbeddedId
private PhotosUsersEntityKey compositePrimaryKey;

//rest
}

此设置将为您提供所需的灵 active 。

关于java - ElementCollections 在父级的 id 上唯一,指定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26598207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com