2

テーブルクエリでロードされるHibernateオブジェクトのフィールドをマップする方法はありますか?

Table_Message例として、フィールドがあるとしましょうid(int),message_key(varchar),message_content(Clob),language(varchar)。このテーブルには、さまざまな言語(ロケール)のメッセージが保持されます。

そして、休止状態を使用してエンティティにマップされた別のテーブル。Commentsフィールド付きid(int),comment_message_id(varchar),created_date(datetime)。の列comment_message_idを参照します。Table_Messagemessage_key

編集:Table_Messageは休止状態のマップされたエンティティではありません

私のコメントクラスが

public class Comment
{
   int id;
   String message;
   Date createdDate;
}

デフォルトのロケール(たとえば、「en」)を使用してmessage_keyでCommentテーブルとTable_Messageテーブルを結合することにより、hibernateにメッセージをロードするように指示する方法はありますか。

基本的に、特定のクエリを実行してフィールドをロードするようにhibernateに指示する方法はありますか?もしそうなら、その方法は何ですか?

エンティティをロードするためのカスタムSQLクエリの作成について知っています。しかし、私はXDocletを使用しているので、それを行う方法はないようです。また、単一のフィールドに対してそれを行う方法があれば非常に便利です。

4

2 に答える 2

1

でテーブルを結合comment_message_idmessage_key、さらに結果を。でフィルタリングする必要がありlanguageます。message_keyはユニークだと思います。

補足として、パフォーマンスを向上させるには整数キーを使用する必要があります。

SQLでデータベースビューを作成し、ビューを不透明にするエンティティを作成してみてください。

CREATE VIEW Comment_Table_Message AS 
SELECT c.id, c.comment_message_id, c.created_date, m.id AS mid, 
       m.message_content, m.language 
FROM Comment c, Table_Message m 
WHERE c.comment_message_id = t.message_key;

これで、エンティティを作成し、CommentTableMessageJPQLを使用して結果を言語でフィルタリングできます。

SELECT x FROM CommentTableMessage x WHERE x.language=?1

Table_MessageがHibernateエンティティである場合、(JPA用語で)次のように記述します。

@Entity
public class Comment
{
   int id;
   @ManyToOne()
   @JoinColumn(name="comment_message_id")
   TableMessage tableMessage;
   String message;
   Date createdDate;
}

@Entity
public class TableMessage {
   int id;
   @Id
   String messageKey;
   bytes[] messageContent; //I don't know how you want to deal with Blobs?
   String language;
}

これで、簡単なJPAクエリを記述できます:( JPAを使用できますか?-次の仮定)

SELECT c FROM Comment c WHERE c.tableMessage.language=?1
于 2012-05-30T11:05:51.880 に答える
1

ResultTransformer がこれに役立つと思います。チェックしてください

http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/transform/ResultTransformer.html http://stackoverflow.com/questions/6423948/resulttransformer-in-hibernate-return-null

于 2012-05-31T06:44:22.450 に答える