Mysql 一对多共享数据集合的JPA映射,带有用户特定值
我有一个包含成就列表的用户模型Mysql 一对多共享数据集合的JPA映射,带有用户特定值,mysql,hibernate,spring-boot,jpa,spring-data-jpa,Mysql,Hibernate,Spring Boot,Jpa,Spring Data Jpa,我有一个包含成就列表的用户模型 @Table(name = "user") @Entity @NamedEntityGraph(name = "User.achievements", attributeNodes={ @NamedAttributeNode("achievements") }) @Data public class User { @Id @NotNull @Column(name = "usern
@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<>();
}
用户成就
从@ElementCollection映射生成的表,atm仅包含用户和成就外键
我希望将布尔值
移动到用户成就
表中,理想情况下无需创建单独的模型用户成就
@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<>();
}
我对使用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;
@manytone(fetch=LAZY)
@JoinColumn(name=“user\u username”,insertable=false,updateable=false)
用户;
@manytone(fetch=LAZY)
@JoinColumn(name=“achivement\u achivement\u id”,可插入=false,可更新=false)
成就;
//以及其他领域
}
类用户{
// ...
@OneToMany(mappedBy=“用户”)
列出所取得的成就;
}
您需要定义
UserAchievementId
我已经有了一个成就表,但是根据上述规范,列值将在用户之间共享。我正在寻找一种存储唯一值的方法,如布尔完成值
,该值应存储在表user\u acquirements中。因此,您必须使用@manytomy
。我们需要用户成就
表的详细信息我已经在用户模型中从@ElementCollection
创建了用户成就表,但atm只将用户用户名
和成就
作为外键存储。我希望在这个表中有更多的值存储,但不确定如何在JPAThanks yuki中指定它,我决定使用与上面类似的解决方案。我试图避免创建用户成就
模型,但似乎没有更直接的JPA解决方案。@ElementCollection
只能用于基本类型,如字符串
,整数
或枚举
:。您应该使用一个@…来处理任何关联。好的方面,但是我能够在targetclass中传递我的对象,并且它可以工作,这是不是因为级联而导致的错误做法?