2009-04-27 56 views
1
@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; 
} 

@Entity 

public class Second{ 

    @Id 
    protected int a; 

    @ManyToOne 
    @JoinColumn(name = "b") 
    First first; 
} 

当我运行在主如下:如何获得自动生成的值?

Second aSecond = new Second(); 

aSecond.a = 2; 

First aFirst = new First(); 

List<Second> scnds = new ArrayList<Second>(); 
scnds.add(aSecond); 

aFirst.seconds = scnds; 

aEntityManager.getTransaction().begin(); 

aEntityManager.persist(aFirst); 

aEntityManager.getTransaction().commit(); 

它在表中设置的“B”列空第二? 如何获取aFirst自动创建的值,并将其设置为b,Second

回答

1

几件事情:

第一条:您不需要@JoinColumn(name =“A”)标注在秒集合中的第一类。该映射正在由第二类处理。

下一页:

Second aSecond = new Second(); 
aSecond.a = 2; 
First aFirst = new First(); 

//its a bi-directional mapping so you have to set the references both ways 
aFirst.seconds.add(aSecond); 
aSecond.first = aFirst; 

aEntityManager.getTransaction().begin(); 
aEntityManager.persist(aFirst); 
aEntityManager.getTransaction().commit(); 
+0

我能问的第二个问题? @ManyToOne @JoinColumn(name =“a”,insertable = false,updatable = false)首先;如果我想在主键“a”而不是“b”上加入第二个表, – Moro 2009-04-27 19:08:50

相关问题