2011-08-11 81 views
0

我正試圖用Hibernate和JPA映射「Drupal」中的數據庫來構建Java數據庫。JPA註解的問題@Transient

在一類,我需要添加一個屬性,稱爲「等級」以後使用它,但屬性不存在於數據庫中,所以我把@Transient批註......

我用設置方法來給它一個值,但後來,這些值是錯誤的(我不明白爲什麼)所以...有沒有辦法做到這一點,而無需修改數據庫?

非常感謝

編輯:

類貢獻者

@Entity 
@Table(name = "biblio_contributor_data") 
public class Contributors implements Comparable { 
@Id 
private int cid; 

private String name; 

private String firstname; 

private String lastname; 

private Member memberProfile; 

@Trasient 
private int rank; 

然後,我有一些文章,以作爲屬性貢獻者名單。

而且我有一篇文章列表。現在,我必須更新他們的排名和排序排名的貢獻者列表:

public static List<Article> sortByRankArticles(EntityManager em, List<Article> list){ 
for (Article article:list){ 
     for(Contributors c:article.getAuthors()){ 


      List<BiblioContributor> result = em.createQuery("from BiblioContributor where nid = "+article.getId() +" and id.cid = "+c.getCid()).getResultList(); 

      c.setRank(result.get(0).getId().getRank()); 
      System.out.println(c.getRank()); 

     } 

     Collections.sort(list); 
    } 

隨着那System.out的......我檢查這些值是正確的,「0,1,2,3,4, 5「

但是當我完成第一個」for「時,我用相同的方法做了一個測試,以證明這些值是否正常,但是我得到以下值:0,0,1,2,2, 3這是錯的

for (Article article:list){ 
     System.out.println("///////"+article.getId()); 
     for(Contributors c:article.getAuthors()){ 
      System.out.println("***"+c.getRank()); 

     } 
    } 
+0

你做得很好,發佈一些代碼,看看是否有相關數據。 – ssedano

+0

謝謝你們的回覆,我會把我的代碼,我沒有這樣做,因爲我從drupal映射數據庫,它是奇怪的,因爲地獄... – dragonalvaro

+0

你可以計算一個單一的選擇? – ssedano

回答

0

您應該使用Formulas直接從數據庫中計算出來。

將您將要使用的查詢放入您的數據庫中。

另一種方式來實現,其與Formulas通過將SQL

對於position列存在於該表中:通過計算

@PostLoad 
public void onPostLoad() { 
    int rank; 
    // Calculate Rank 
    this.rank = rank; 
} 

@Formula("position + 1") 
public int getRank() { 
    return this.rank; 
} 

另一種方式是用PostLoad我不知道你的代碼。所以我不能更具描述性。

問候。

+0

我正在尋找的方式來「保存「對象中的某些值在桌子上沒有這個值,也沒有在任何桌子上創建新的字段 – dragonalvaro

+0

這就是它的作用。屬性等級可能是一個Object。 – ssedano