【发布时间】:2010-10-22 08:04:52
【问题描述】:
是否可以在普通 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”中设置“insertable = false, updatable = false”,则会引发异常:
"参数索引超出范围。4 不在有效值 1 和 3 之间"
如果我在@manyToOne 的关系中设置“insertable = false, updatable = false”,它会运行,但在“Second”表的“a”中设置为 0
目标:在 Second.a 中设置 First.a 的生成值。
/////////////////////////
创建数据库的sql:
先建表( 一个整数, 主键(一) );
创建表秒( 一个整数, b 整数, 主键 (a, b) );
第三个创建表( 一个varchar(20), 整数 );
请...帮助
提前感谢
【问题讨论】: