2011-08-11 19 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を使用してデータベースから直接計算する必要があります。

データベースで計算するために使用するクエリを配置します。

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

注意を算出することにより、

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

もう一つの方法は、PostLoadである:

それを達成するための別の方法は、この表の既存のposition列のSQL

を配置することによって、Formulasであります私はあなたのコードを知らない。だから私はもっと説明的ではありません。

よろしくお願いいたします。

+0

"保存する方法を探していますオブジェクトのいくつかの値はテーブルにその値を持たず、テーブルに新しいフィールドを作成しないでください – dragonalvaro

+0

それはそうです。属性ランクはObjectである可能性があります。 – ssedano

関連する問題