gpt4 book ai didi

java - Hibernate - @OneToMany - 调用方法时发生 com.sun.jdi.InvocationException

转载 作者:行者123 更新时间:2023-11-29 09:34:27 25 4
gpt4 key购买 nike

我对 OneToMany 关系有疑问。我正在使用 spring-mvc 和 spring-security 以及 hibernate 4。

我正在为所有人使用注释。

我的问题是在实体 War 中,当我看到属性列表播放器调试时,我看到 players= PersistentBag 并且当我单击它时 com.sun.jdi.InvocationException 发生调用方法。

我也得到了这个异常(exception):

org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: clanwar.model.War.players, could not initialize proxy - no Session

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: clanwar.model.War.players, could not initialize proxy - no Session

实体:

@Entity
@Table(name = "WARS")
public class War implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", nullable = false)
private int id;

@ManyToOne
@JoinColumn(name = "CLAN")
private Clan clan;

@Column(name = "START_DATE")
private Date startDate;

@Column(name = "ENEMY_NAME")
private String enemyName;

@OneToMany(mappedBy = "war")
private List<WarPlayer> players;

@Transient
private List<Enemy> enemies;

public War() { }

// Getters and setters.

}

--

@Entity
@Table(name = "WAR_PLAYERS")
public class WarPlayer implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@ManyToOne
@JoinColumn(name = "WAR")
private War war;

@Id
@ManyToOne
@JoinColumn(name = "PLAYER")
private Player player;

@Column(name = "WAR_NUMBER")
private int warNumber;

@ManyToOne
@JoinColumn(name = "OBJETIVE_1")
private Attack objetive1;

@ManyToOne
@JoinColumn(name = "OBJETIVE_2")
private Attack objetive2;

@ManyToOne
@JoinColumn(name = "RECOMMENDED_1")
private Attack recommended1;

@ManyToOne
@JoinColumn(name = "RECOMMENDED_2")
private Attack recommended2;

@ManyToOne
@JoinColumn(name = "FINAL_1")
private Attack final1;

@ManyToOne
@JoinColumn(name = "FINAL_2")
private Attack final2;
private String comment;

public WarPlayer() {}

// Getters and setters

}

我的道

@Override
public War findById(int id) throws DaoException {

War war;

try {
war = (War) getSession()
.createQuery("from War where ID = :id")
.setParameter("id", id)
.uniqueResult();
} catch (Exception e) {
throw new DaoException(e.getMessage());
}

return war;
}

最佳答案

Hibernate 文档说:

In the normal case the orders association would be lazy loaded by Hibernate

所以,你需要使用预取:

 @OneToMany(mappedBy = "war",fetch = FetchType.EAGER)
private List<WarPlayer> players;

关于java - Hibernate - @OneToMany - 调用方法时发生 com.sun.jdi.InvocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27289632/

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