2016-07-26 7 views
0

プライベートネットワーク上で作業しているため、コードをコピーして貼り付けるのが難しいです。私は必要なものに近い答えを見つけましたが、うまくいっていませんでした。私は私のコードの簡単な例をしようとします、うまくいけば私の問題を解読するのに十分です。マップハイバーネーションアノテーション付きテーブルの1列

@Table(name="DRIVER") 
class Driver { 
    long id; //ID - primary key of Driver 
    String driverIdentStr; // DRIVER_IDENT_STR - like driver's license # 
}//end class Driver 

@Table(name="GROUP_PARTICIPANT") 
class GroupParticipant { 
    long id; //ID - primary key of GroupParticipant 
    long driverId; //DRIVER_ID - id of the Driver participanting and maps to Driver.id 

    //I just want this one value from Driver and not the whole Driver... 
    //I've tried: 
    //@Formula("(select driverIdentStr from Driver where Driver.id = DRIVER_ID)") 
    //also tried: 
    //@Column(table="DRIVER", name="driverIdentStr") 
    String driverIdentStr; 
}//end class GroupParticipant 

は@Formulaは失敗しました「テーブルまたはビューが見つかりません」しかし、私は間違いなくDRIVERテーブルにドライバのクラス定義されたマッピングを持っています。 @Formulaのクエリ言語をHQLの代わりにSQLに変更したときHibernateはGROUPPARTICIPANT0.driverIdentStrが無効な識別子であると不満を持ちます.Driver(??)から値を取得する代わりにGroupParticipantからdriverIdentStrを取得しようとしていたと思います。

@Columnは、私がGroupParticipantに持っているdriverIdからDRIVERにマップする方法がわからないため、失敗します。

最終的に、GroupParticipant.driverIdentStrをDriver.idのGroupParticipant.driverIdに参加させ、Driver.driverIdentStrを取得する方法を理解できません。

ご協力いただければ幸いです。

答えて

1

私が答えを見つけ

@Formula( "(ドライバD d.ID = DRIVER_IDからd.DRIVER_IDENT_STRを選択)")

...働いていたものです: http://gokhan.ozar.net/hibernate-derived-properties-formula-annotation "より複雑な例"見出しの下に表示されます。ここで

は、私は上記の例を見つける前に、式の注釈で

  1. のみSQL(まったくHQL)
  2. ...読書からと例から学んだことですが、私はDを使用しました。はWHERE句にありますが、式クエリのSELECT部分​​には含まれず、Hibernateは不平を言います。その時点で、私はHibernateが私の式の注釈を無視してプライマリテーブルから値を取得しようとしていたと思っていましたが、それは私の式を無視していなかったので、私の式は基本的にプライマリテーブルから値を得るように指示していました(d。そうでなければそれを伝えるために使用されていません)。

ありがとう!

0

@Formula注釈は、SQLフラグメントとして解釈されるので、以下は、あなたのマッピングに基づいて、標準的な命名を想定し、動作するはずです:

@Formula("SELECT driverIdentStr FROM DRIVER WHERE id = driverId") 

を明確にする:

  1. driverIdentStrが列名でありますエンティティDriverは、そのプロパティにマップされます。
  2. idは、エンティティDriverの主キー列名です。
  3. driverIdは、GroupParticipantの列名です。
  4. データベースで大文字と小文字が区別される場合は、明示的なテーブル名DRIVERを使用しました。ここで
関連する問題