現在、私は既存のDBスキーマをjpaエンティティにマッピングするのに苦労しています。jpaのセカンダリテーブルの識別カラムを使用することは可能です
は、私がこれに似た2つのテーブルを、持っている:
表1でservicetype
が表2でのサービスタイプへの外部キーをある
Table 1 Table 2
|Service | |Servicetype |
|servicetype | |Servicecategory |
| | | |
。 しかし、表1のサービスは、属しているカテゴリに基づいて大きく違った動作をします(100以上のサービスタイプがありますが、カテゴリは4つだけです)。 テーブル1をマップできるようにしたいと思いますそのサービスタイプのカテゴリに基づいて4つの異なるエンティティクラスを作成します。
これは私がこれまで持っているものです。
@Entity
@Table(name = "table1")
@DiscriminatorColumn(name = "servicecategory", discriminatorType =
discriminatorType.INTEGER)
@DiscriminatorValue("1")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@SecondaryTable(name = "table2",
pkJoinColumns =
@PrimaryKeyJoinColumn(name = "servicetype", referencedColumnName =
"servicetype"))
public class AbstractService implements Serializable {
...etc
そして4本から延びるクラス、動作しません異なるdiscriminatorvalue
、とbuthは、私が使用しているEclipseLinkは、以来、ルックアップしようとしますtable1のservicecategoryの値。
このようなマッピングをjpaで表すことは可能ですか、それとも各クエリで "where servicecategory = ?
"というマッピングを行うだけでよいですか。
定義にテーブルと列名を指定しようとしましたか? "table2.servicecategory" – Chris
discriminatorcolumnアノテーションには?はい。しかし、生成されたクエリはすでに別名でテーブルを指定しているので、答えが$ tablealias.table2.servicecategory – vruum