2011-04-03 65 views
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); 
} 

失敗,任何想法,這是爲什麼失敗?我沒有做任何複雜的事情,只是一個基本的更新。

+0

即使我只是做person.setFirstName(「test」),然後堅持,它也失敗了所有其他實體。 – 2011-04-03 13:49:05

+0

你掃描了你的實體包嗎? – Premraj 2011-04-03 17:47:16

+0

掃描是什麼意思? – 2011-04-03 18:00:19

回答

0

我終於破解了它。

數據庫中的版本字段爲空,將其更改爲0後,其工作完美無瑕。 似乎Hibernate試圖增加空字段。

猜測在未來創建燈具數據時我會多花點心思,不知道Hibernate是否對數據庫中的空值敏感。

相關問題