2017-04-14 76 views
1

我無法使用Hibernate,Tomcat和MySQL讀取引用實體的id。無法從servlet上下文中檢索到hibernate外鍵

實施例,運行下面的代碼:

List<UserAccount> users = listEntities(UserAccount.class); 
    for (UserAccount user : users) { 
     UserAccountStatusCatalog status = user.getStatus(); 
     System.out.println("[User (" + user.getId() + ") : "+user.getAccountName()+"] - " + status + ": " + status.getId()); 
    } 

可否使用SQL服務器DB

給在一個簡單的Java應用程序或servlet上下文下面的輸出[用戶(1):系統] - 懸浮:15020
[用戶(2):管理員] - 有效:15010
[用戶(4):試驗] - 有效:15010

而這從使用MySQL DB

一個servlet上下文內[用戶(1):系統] - 暫停:0
[用戶(2):管理員] - 有效:0
[用戶( 4):測試] - 活動:0

這是運行Java在Tomcat 7的服務器上8
數據庫爲MySQL 5.5和我使用休眠核心:5.1.0.Final

我已經測試過一個很多不同的方法,例如更改Hibernate版本,將數據庫更改爲MariaDB(不工作)和SQL服務器(完美工作)。
我已經在Tomcat 6,7和8(同樣的結果,不工作)測試
測試基於java 7和8(同樣的結果,不工作)

實體

@Entity(name = "UserAccount") 
@Table(name = "user_account") 
@Audited 
public class UserAccount { 
    @ManyToOne(optional = false, fetch = FetchType.LAZY) 
    @JoinColumn(name="id_status", nullable=false, [email protected](name = ForeignKeys.FK_USERACCOUNT_STATUS)) 
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 
    private UserAccountStatusCatalog status; 
    [...] 


@Entity 
@Table(name="user_account_status_catalog") 
public class UserAccountStatusCatalog { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = ID_COLUMN_NAME, nullable = false) 
    private int id; 

    @Column(name = "name", nullable = false) 
    private String name; 
} 

所以我的問題是
有沒有人有任何關於這個特定問題的經驗或有任何關於我可以繼續調試的指針,因爲我完全不知道該怎麼做。

+0

你可以共享'UserAccount'和'UserAccountStatusCatalog'的代碼。 –

回答

0

所以我設法解決這個我自己的。事實證明,罪魁禍首是javassist-3.16.0導入。 用javassist3.20.0導入替換這個舊版本後,所有事情都按照它應有的方式工作。

因此,對於任何遇到類似問題的人來說,更換此導入是一個很好的開始。