Java 在另一个弹簧图元内使用弹簧图元
当我尝试将“游戏”对象添加到我的用户类中指定的ArrayList时,出现以下错误。此操作是在我的控制器类中完成的: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异常:对象引用未保存的临时实例-在刷新之前保存临时实例:
“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)