2 つのデータベース テーブルがあり、Hibernate を使用して 2 つの間に多対 1 の関係を設定したいと考えています。
これら 2 つのテーブルは作成しませんでしたが、プロジェクトを開始したときに既に作成されていました。私は Hibernate を初めて使用し、2 つのテーブル間で ManyToOne の関係を作成したいと考えています。
これは通常は簡単なことですが、2 つのテーブル間のリンク「Praxiscode」は主キーではなく、次のようなことをしたいと思います。
@ManyToOne(targetEntity = PraxisIITest.class)
@Fetch(FetchMode.JOIN)
@NotFound(action = NotFoundAction.IGNORE)
@Formula(value = "(SELECT praxis.ID FROM lstPraxis praxis where praxis.Praxiscode=Praxiscode and Testdate BETWEEN praxis.BeginDate AND praxis.EndDate)")
private PraxisIITest praxisIITest;
ただし、上記の @Formula を指定すると、列が「フィールド リスト」にないことを訴える例外がスローされます。
org.hibernate.exception.SQLGrammarException: Unknown column 'praxisiite1_.praxisIITest_ID' in 'field list'
org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
PraxisIITest で ID を指定する場所はこちら ->
@Entity
@Table(name="lstPraxis")
@Cache(region="edu.uky.cepis.cache.praxisIItest", usage=CacheConcurrencyStrategy.READ_WRITE)
public class PraxisIITest implements java.util.Comparator<PraxisIITest>, Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
private long id;
私はこれについてすべて間違っていますか?または、非常に基本的なものが欠けているのでしょうか。私の理解では、これでうまくいくはずです...
どんな考えやアドバイスも大歓迎です!よろしくお願いします!