gpt4 book ai didi

java - 多次调用 jparepository.save() 会抛出异常

转载 作者:行者123 更新时间:2023-11-30 07:53:09 26 4
gpt4 key购买 nike

我想多次调用jparepository.save。

但是当我第二次尝试保存该对象时,它会抛出 PersistentObjectException 并表示已将分离的实体传递给持久化。

代码和异常如下。我错过了什么?

public void createGame(GameTeamRequest gameTeamRequest) {
for(Entry<String, Integer> hm : gameTeamRequest.getTeamsInnigsPostionMap().entrySet()) {
GameTeam gameTeam = new GameTeam();
Team team = new Team();
team.setTeamName(hm.getKey());
gameTeam.setTeam(team);
gameTeam.setGame(gameTeamRequest.getGame());
gameTeam.setInningsPosition(hm.getValue());
gameTeamRepository.save(gameTeam);
}
}

异常情况如下:

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/iscorecard] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.dragonfly.iscorecard.domain.Game; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.dragonfly.iscorecard.domain.Game] with root cause
org.hibernate.PersistentObjectException: detached entity passed to persist: com.dragonfly.iscorecard.domain.Game
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:842)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:835)
at org.hibernate.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:52)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:387)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:330)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:424)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:263)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:135)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:852)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:826)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:830)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:865)

游戏类:

  @Entity
@Table(name = "GAME")

public class Game extends Model {

@Column(name = "TOURNAMENT_ID")
private String tournamentId;

@OneToMany(mappedBy = "game")
private Set<GameTeam> gameTeam;
}

团队级别:

    @Entity
@Table(name = "TEAM")

public class Team extends Model {

@Column(name = "TEAM_NAME")
private String teamName;

@OneToMany(mappedBy = "game")
private Set<GameTeam> gameTeam;

}

游戏团队:

    @Entity
@Table(name = "GAME_TEAM")

public class GameTeam extends Model {

@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name = "GAME_ID")
private Game game;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "TEAM_ID")
private Team team;

@Column(name = "INNINGS_POSITION")
private int inningsPosition;

}

最佳答案

异常(exception)是指Game对象,因此看起来您正在为第二个GameTeam设置一个分离的Game。您可以通过添加(至少)来解决此问题

 cascade = { CascadeType.PERSIST, CascadeType.MERGE }

到您的映射。

关于java - 多次调用 jparepository.save() 会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com