0
我想弄清楚爲什麼我得到一個InvocationTargetException時,持久修改播放器對象。 該項目是一個Hibernate作爲ORM的Spring Roo項目(前端使用GWT,但在後臺發生錯誤時與此無關)。Hibernate實體拋出InvocationTargetException持續
通過代碼步進,在其通過RPC調用調用player.persist()發生了錯誤:
@Override
public LeagueDto setPlayerLeague(long playerId, String session, long leagueId) {
Player player = Player.findPlayer(playerId);
League league = League.findLeague(leagueId);
player.setLeague(league);
player.persist(); // fails here
// do some more stuff here before returning the DTO
return leagueDto;
}
踏入player.persist()進入到模型:
@RooJavaBean
@RooToString
@RooEntity(finders = { "findPlayersByUsername" })
public class Player {
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(style = "S-")
private Date created;
@NotNull
@Column(unique = true)
@Size(min = 3, max = 32)
private String Username;
....
@Size(max = 64)
private String FirstName;
@Size(max = 64)
private String LastName;
@ManyToOne
private Country country;
@ManyToOne
private League league;
...
}
進一步步入模型去AspectJ的代碼中一直存在被稱爲:
privileged aspect Player_Roo_Entity {
declare @type: Player: @Entity;
@PersistenceContext
transient EntityManager Player.entityManager;
....
@Transactional
public void Player.persist() {
if (this.entityManager == null) this.entityManager = entityManager();
this.entityManager.persist(this);
}
....
}
它然後設法跨過this.entityManager.persist(本),當函數退出,它RPC.java
public static String invokeAndEncodeResponse(Object target,
Method serviceMethod, Object[] args,
SerializationPolicy serializationPolicy, int flags)
throws SerializationException {
....
String responsePayload;
try {
Object result = serviceMethod.invoke(target, args);
responsePayload = encodeResponseForSuccess(serviceMethod, result,
serializationPolicy, flags);
} catch (IllegalAccessException e) {
....
} catch (IllegalArgumentException e) {
....
} catch (InvocationTargetException e) {
// Try to encode the caught exception
//
Throwable cause = e.getCause();
responsePayload = encodeResponseForFailure(serviceMethod, cause, serializationPolicy, flags);
}
失敗,任何想法,這是爲什麼失敗?我沒有做任何複雜的事情,只是一個基本的更新。
即使我只是做person.setFirstName(「test」),然後堅持,它也失敗了所有其他實體。 – 2011-04-03 13:49:05
你掃描了你的實體包嗎? – Premraj 2011-04-03 17:47:16
掃描是什麼意思? – 2011-04-03 18:00:19