mysql - 用于一对多共享数据集合的 JPA 映射,具有用户特定的值
问题描述
我有一个包含成就列表的用户模型
@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;
user_achievements
从@ElementCollection 映射生成的表,其中atm 仅包含用户和成就外键
我希望将boolean achieved
值移动到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
推荐阅读
- selinux - 在哪里可以找到 libselinux 中函数“setcon”的源代码?
- c++ - 使用 OpenCV c++ 查找下一个图像
- raspberry-pi - 为什么 Juypter notebook 不能在我的树莓派上运行
- angular - 路由到同一组件时重新显示加载
- reactjs - 想要在对象数组中保存(设置)状态
- typescript - 如何获取数组项的类型
- javascript - mapStateToProps 返回未定义
- ruby - Ruby Array sort_by 变量中的值
- java - 为什么@RequestHeader 不捕获过滤器中添加的自定义标头
- batch-file - 如何使用 Robocopy 将文件从多个子文件夹(未知名称)复制到一个文件夹?