我有一个包含成就列表的用户模型
@Table(name = "user")
@Entity
@NamedEntityGraph(name = "User.achievements",
attributeNodes={
@NamedAttributeNode("achievements")
})
@Data
public class User {
@Id
@NotNull
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@ElementCollection(fetch = FetchType.LAZY, targetClass = Achievement.class)
private List<Achievement> achievements = new ArrayList<>();
}
这是成就模型
@Entity
@Data
@Table(name = "achievement")
public class Achievement {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String achievementId;
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
@Column(name = "achieved", columnDefinition="BOOLEAN DEFAULT false", nullable = false)
private boolean achieved = false;
从@ElementCollection映射生成的user_achievements
表,其中atm仅包含用户和成就外键
我希望将 bool 实现
值移至user_achievements
表,理想情况下无需创建单独的模型User_Achievements
我对使用 Jpa 相当陌生,但我觉得这个场景太基础了,所以必须有一个直接的方法来做到这一点,我似乎无法找到它
最佳答案
@Entity
class UserAchievement {
@EmbeddableId
UserAchievementId id;
@ManyToOne(fetch=LAZY)
@JoinColumn(name="user_username", insertable=false, updatable=false)
User user;
@ManyToOne(fetch=LAZY)
@JoinColumn(name="achivement_achivement_id", insertable=false, updatable=false)
Achivement achivement;
// and other fields
}
class User {
// ...
@OneToMany(mappedBy="user")
List<UserAchievement> userAchievements;
}
并且您需要定义UserAchievementId
关于mysql - 用于一对多共享数据收集的 JPA 映射,具有用户特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59662730/