0

Java EE 5(IBM RAD7.5およびWebSphere7)でJPAを使用しています。問題を次の例に簡略化しました...

プロジェクトとユーザーがいます。テーブルは次のようになります。

PROJECT
--
id
name
projectmanagerid // is a User

USER
--
id
username

私のクラスは次のようになります。

@Entity
@Table(name="PROJECT")
class Project
  @Id
  @GeneratedValue(...)
  Long id;
  String name;
  @ManyToOne(fetch=FetchType.EAGER)
  @JoinColumn(name="projectmanagerid");
  User projectManager;

@Entity
@Table(name="USER")
class User
  @Id
  @GeneratedValue(...)
  Long id;
  String username;

プロジェクトを取得するには、次のようにします。

Query query = em.createQuery("select distinct p from Project p");
query.getResult...

を除いてすべてproject.projectManagerが機能しますnull

FetchType.EAGERユーザーにデータを入力させてはいけませんか?私は何が間違っているのですか?

どんな提案でも大歓迎です!

ロブ

4

2 に答える 2

0

たとえば、参照が関係の反対側にある場合、結合列は@Columnアノテーションを使用してこれをマップできるはずです。

Project->(has)User then Project has @Column with name = "projectmanagerid"

もう一方にユーザー参照プロジェクトがある場合は、

User->(has a)Project then Project has @JoinColumn with name = "projectid"

現在、ユーザーテーブルにはprojectmanageridという参照列があると述べていますが、そうではありません。

これがお役に立てば幸いです、TomRed

于 2012-05-19T00:56:55.510 に答える
0

問題の答えを見つけたようですので、ここに投稿します。うまくいけば、それは他の人を助けるかもしれません。

IBM RAD 7.5では、JPAプロジェクトのプロパティに「プラットフォーム」と呼ばれる設定があります。デフォルト値は「RADJPAプラットフォーム」です。「Generic」に変更すると動作します。

注:私もtomredが提案したように変更@JoinColumしましたが、それが何かをしたかどうかはわかりません。@Column

皆さんありがとう!

ロブ

于 2012-05-22T13:05:12.087 に答える