我有一个问题与OneTo多关系。我正在使用sping-mvc和sping-Security和Hibernate4。
我正在为所有人使用注释。
我的问题是在实体战争中,当我看到属性列表玩家调试时,我看到玩家= PersistentBag
,当我单击它时,com.sun.jdi.InvocationException发生了调用方法。
我也得到了这个例外:
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
}
我的DAO
@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;
}
替换我的道
@Override
public War findById(int id) throws DaoException {
Transaction transaction = null;
Session session = null;
try {
session = sessionFactory.openSession();
session.setFlushMode(FlushMode.COMMIT);
transaction = session.beginTransaction();
String hql = "from War where ID = :id";
Query query = session.createQuery(hql);
query.setParameter("id", id).uniqueResult();
} catch (Exception e) {
throw new DaoException(e.getMessage());
}
return war;
}
FetchType.EAGER 效率不高。您必须包含 org.hibernate.annotations.Fetch 注释。
所以:
@Fetch(FetchMode.SUBSELECT)
@OneToMany(mappedBy = "war", fetch = FetchType.LAZY)
private List<WarPlayer> players;
Hibernate文档 说:
在正常情况下,订单关联将由Hibernate延迟加载
因此,您需要使用急切抓取:
@OneToMany(mappedBy = "war",fetch = FetchType.EAGER)
private List<WarPlayer> players;
问题内容: 我有在Android上运行良好的代码。当我将其移植到具有JRE 1.6的Windows 64位计算机上时,该代码不起作用。 当我运行以下代码行时: 我得到以下异常: java.security.NoSuchAlgorithmException:SHA256 MessageDigest在java.security.MessageDigest.getInstance(未知源)处的java.
我是Spring的新手。我正在使用SpringWebMVC开发RESTAPI。对于错误处理,我得到了这个链接http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann rest spring mvc异常 我曾尝试在我的项目中使用ResponseEntityExceptionHand
问题内容: 当我的程序尝试从数据库中按名称加载用户时,如何解决Hibernate 偶尔引发的异常的原因? 我将表中的列错误地映射到类而不是其他某种整数类型吗?请注意,同一应用程序将其他表中的列映射到对象,但是当用来自这些表的行填充对象时,Hibernate 不会 引发此异常。 进一步注意到,该方案使 RMI缓存复制 的 唯一用户缓存 。此异常可能与缓存复制有关吗?它是Ehcache还是Hibern
TestController使用一个TestService,它有一个Spring@async asyncComp.getGood(s)方法。当输入字符串不是“good”时,会引发异常。TestController将获得异常,在其余响应中,状态500内部服务器错误。我找不到我项目的确切代码,但找到了一些关于使用CompletableFuture的想法。在答案区域,我发布了我写的作为测试应用程序的内容
我想问一下这种行为的原因,因为在运行Spring方法/类时,我似乎不完全理解Hibernate中的和之间的区别。 下面的代码应该回滚DB操作,但它没有回滚(整个类注释为): 以下代码在引发异常时按预期回滚: save()方法来自类,因此它的代码是: 该实体是一个已存在的实体,因此我理解它正在执行。根据JPA规范: find方法(前提是在没有锁的情况下调用它或使用LockModeType.None调
JUnit 4.12