Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 一对多共享数据集合的JPA映射,带有用户特定值_Mysql_Hibernate_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

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中传递我的对象,并且它可以工作,这是不是因为级联而导致的错误做法?