【发布时间】:2020-01-09 11:14:11
【问题描述】:
我有一个包含成就列表的用户模型
@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只包含用户和成就外键
我希望将 boolean achieved 值移动到 user_achievements 表中,理想情况下无需创建单独的模型 User_Achievements
我对使用 Jpa 还很陌生,但我觉得这个场景太基础了,所以必须有一个直接的方法来做,我似乎无法找到它
【问题讨论】:
-
@ElementCollection只能与String、Integer或Enum等基本类型一起使用:docs.oracle.com/javaee/7/api/javax/persistence/…。您应该使用@...ToMany关联。 -
好点,但我可以在 targetclass 中传递我的对象并且它可以工作,只是由于级联是不好的做法吗?
标签: mysql hibernate spring-boot jpa spring-data-jpa