在純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();
}}
的問題是在課堂上 「二」:
如果我設置 「插入=假,可更新=假」 在現場 「一」,它拋出異常:
「參數索引超出範圍4不是與1有效值3之間」
而我f在@manyToOne的關係中設置「insertable = false,updatable = false」,它運行但在表「Second」的「a」中設置爲0
目標:將First.a的生成值設置爲Second 。一個。
/////////////////////////////
的SQL創建DB:
創建表第一個( 一個int, 主鍵(a) );
創建表第二( 一個INT, b INT, 主鍵(A,B) );
create table third( a varchar(20), b int );
請...幫助
Thanx提前
Thanx給你,我試了@id @manytoone,但它似乎不工作。 – Moro 2009-04-28 19:07:02