mysql - 用于一对多共享数据收集的 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 = "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仅包含用户和成就外键

enter image description here

我希望将 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/

相关文章:

mysql - 使用 Dropwizard、Hibernate 和 MySQL 进行 UTF-8 编码

rest - Spring Boot 应用程序 : No converter found for return value of type

Spring Data 与 QueryDslPredicateExecutor 没有找到类型错误的属性 findAll

php 在 mysql 更新查询中使用两个数组

java - 使用 hibernate native 查询的错误 BigInteger 结果

mysql - Hive 1.2 Metastore 服务在将其配置为 S3 存储而不是 HDFS 后不会启动

java - hibernate示例程序中的异常

java - Spring Cloud Gateway IPv4地址无效

mysql - 从一个表中返回与另一个表具有对应关系的行

mysql - 为什么mysql即使使用LIMIT子句查询也会花费很长时间?