Java 在另一个弹簧图元内使用弹簧图元

Java 在另一个弹簧图元内使用弹簧图元,java,spring,spring-boot,spring-mvc,Java,Spring,Spring Boot,Spring Mvc,当我尝试将“游戏”对象添加到我的用户类中指定的ArrayList时,出现以下错误。此操作是在我的控制器类中完成的: “org.hibernate.transientObject异常:对象引用未保存的临时实例-刷新前保存临时实例:com.billsheng.huddlespringmvc.models.Game;嵌套异常为java.lang.IllegalStateException:org.hibernate.TransientObject异常:对象引用未保存的临时实例-在刷新之前保存临时实例:

当我尝试将“游戏”对象添加到我的用户类中指定的ArrayList时,出现以下错误。此操作是在我的控制器类中完成的:

“org.hibernate.transientObject异常:对象引用未保存的临时实例-刷新前保存临时实例:com.billsheng.huddlespringmvc.models.Game;嵌套异常为java.lang.IllegalStateException:org.hibernate.TransientObject异常:对象引用未保存的临时实例-在刷新之前保存临时实例:com.billsheng.huddlespringmvc.models.Game“

用户实体

@Data
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String email;
    private String firstName;
    private String lastName;
    private String password;
    private String chosenTeam;
    private int gamesPlayed;
    private int gamesWon;

    @ElementCollection
    private List<Game> games = new ArrayList<>();

    public User(String firstName, String lastName, String email, String password, String chosenTeam, int gamesPlayed, int gamesWon, ArrayList<Game> games) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.chosenTeam = chosenTeam;
        this.gamesPlayed = gamesPlayed;
        this.gamesWon = gamesWon;
        this.games = games;
    }

    public User(String firstName, String lastName, String email, String password, String chosenTeam) {
        this(firstName, lastName, email, password, chosenTeam, 0, 0, null);
    }

    public User(int gamesPlayed, int gamesWon, ArrayList<Game> games) {
        this.gamesPlayed = gamesPlayed;
        this.gamesWon = gamesWon;
        this.games = games;
    }

    public User() {
    }

//getters and setters
}
@Data
@Entity
public class Game {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String homeTeam;
    private String awayTeam;
    private Date date;
    private String location;
    private String bettingOdds;
    private boolean inProgress;
    private boolean isReviewed;

//getters and setters
}
我做了一些研究,我相信这个问题源于我在我的用户对象中使用我的游戏对象,但我不确定具体是什么问题。
感谢您的帮助。

@ElementCollection
不应用于实体集合;它用于
@embeddeble
集合。如果
事物
是一个实体,您不使用
@ElementCollection
,而是使用
@OneToMany


@ElementCollection
: 定义基本类型或可嵌入类的实例集合

您可以使用@OneToMany映射来建立用户和游戏实体之间的关系

User.java

@OneToMany(cascade=CascadeType.ALL,fetch= FetchType.LAZY,mappedBy = "user")
private List<Game> games = new ArrayList<>();

//getters and setters

@ElementCollection
不应与实体集合一起使用;它与
@embeddeble
的集合一起使用。如果
事物
是一个实体,您不使用
@ElementCollection
,而是使用
@OneToMany


@ElementCollection
: 定义基本类型或可嵌入类的实例集合

您可以使用@OneToMany映射来建立用户和游戏实体之间的关系

User.java

@OneToMany(cascade=CascadeType.ALL,fetch= FetchType.LAZY,mappedBy = "user")
private List<Game> games = new ArrayList<>();

//getters and setters

您是否尝试使用
@OneToMany
映射集合并配置级联?谢谢,我尝试映射@OneToMany,但我遇到了相同的错误。“配置级联”是什么意思“这不是春天的事<代码>@Entity是关于JPA的。Spring为使用JPA特性提供了帮助,但这完全是JPA。关于ngueno的评论,请阅读
@OneToMany
上的
cascade
属性的文档。哦,是的,我是Java api开发新手。谢谢你们的帮助。以下注释起作用:
@OneToMany(cascade=CascadeType.ALL)
您是否尝试将集合映射到
@OneToMany
并配置级联?谢谢,我尝试映射@OneToMany,但得到了相同的错误。你所说的“配置级联”是什么意思<代码>@Entity是关于JPA的。Spring为使用JPA特性提供了帮助,但这完全是JPA。关于ngueno的评论,请阅读
@OneToMany
上的
cascade
属性的文档。哦,是的,我是Java api开发新手。谢谢你们的帮助。以下注释有效:
@OneToMany(cascade=CascadeType.ALL)