JPAまたはJPA + Hibernate拡張では、コンポジットプライマリキーの一部である外部キーを使用できますか?外部キーもプライマリキーの一部です
@TableGenerator(name = "trial", table = "third",
pkColumnName = "a" , valueColumnName = "b", pkColumnValue = "first")
@Entity
public class First{
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "trial")
protected int a;
@OneToMany(mappedBy ="first", cascade = CascadeType.PERSIST)
@JoinColumn(name = "a")
protected List<Second> seconds;
}
class IDC implements Serializable{
//@Column(name = "a", insertable = false, updatable = false)
protected int a;
protected int b;
}
@Entity
@IdClass(IDC.class)
public class Second{
@Id
//@Column(name = "a", insertable = false, updatable = false)
protected int a;
@Id
protected int b;
@ManyToOne
@JoinColumn(name = "a"/*, insertable = false, updatable = false*/)
First first;
}
メイン:
public class Persister {
public static void main(String[] args) {
First aFirst = new First();
Second aSecond = new Second();
aSecond.b = 300;
List<Second> scnds = new ArrayList<Second>();
scnds.add(aSecond);
aFirst.seconds = scnds;
aSecond.first = aFirst;
aEntityManager.getTransaction().begin();
aEntityManager.persist(aFirst);
aEntityManager.getTransaction().commit();
}}
問題は、 "第二" クラスである:
私はフィールド "A" で "偽=挿入可能偽=更新可能" に設定した場合、それが例外をスローします:「範囲外のパラメータインデックス4 1と3の有効な値の間ではありません。」
と私f @manyToOneの関係で "insertable = false、updatable = false"を設定すると、テーブル "Second"の "a"に0を設定します
目的:First.aの生成値をSecond .a。
/////////////////////////////
にDBを作成するSQL:
テーブルを作成します最初( int、 主キー(a) );
秒( INT、 BのINT、 主キー(A、B) )のテーブルを作成します。
テーブルを3番目に作成します( a varchar(20)、 b int )。すべての
ください...事前に
ありがとうを助ける
あなたのために、@manytooneで@idを試しましたが、うまくいかないようです。 – Moro