我使用 Spring MVC/Apache Tiles 发现了一个问题。
update.jspx 为当前实体(Position.java)提供了一个更新表单,它有一个复合键:
@RooJpaActiveRecord(persistenceUnit = "theUnit", transactionManager = "theManager", table = "theTable", identifierType = PositionPK.class)
Class Position{
//User user;
//Role role;
//other fields....
}
它是一个旧的遗留类,使用User
和Role
作为复合键(这意味着它不是一个好的设计,但我们必须忍受它)。所以我有另一个使用@RooIdentifier 的复合键类
@RooIdentifier
Class PositionPK extends Serializable {
User user;
Role role;
//override equals and hashCode blahblah...
}
问题是,在 update.jspx 页面上,我提供了一个字段来更新User
位置,表单返回没有异常但返回User
as null
。
然后我尝试将 user 字段添加回 Position 类(也不是很好的设计,但出于调试目的,因此 User 存在于实体类和 PK 类中),现在应用程序向我抛出异常:
javax.validation.ValidationException: Call to TraversableResolver.isReachable() threw an exception
调用 TraversableResolver.isReachable() 引发异常
我挖掘了似乎实体类可能缺少 getter/setter 或 id 的异常。由于 getter/setter 都是由 Roo 管理的,所以这应该不是问题,所以我认为问题在于 Spring MVC 如何将主键类转换为前端 jsp 视图的兼容性,反之亦然。
任何提示将不胜感激。