OneToMany和ManyToOne关系

时间:2016-03-20 00:08:02

标签: jpa one-to-many many-to-one

我有2个表映射@OneToMany和@ManyToOne及其setter和getter,因此用户可以拥有多个事务,而一个事务只能有一个用户。

如果我在用户列表中添加了一个事务,则数据会正确进入表中,并且可以使用用户的getter来检索事务。但是当我使用事务中的getter来查找它的所有者时,它并没有从users表中找到它的用户。

反向也可用,如果我为交易数据设置了一个用户,并且可以使用Transaction的getter检索用户,但是使用User的getter不会显示任何事务..

唯一的方法是在用户列表中添加一个事务并为事务设置用户。为什么会这样?我认为如果我只使用其中一个动作,则应该自动提供反向。

用户

@Entity
@Table(name = "users")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToMany(mappedBy = "user")
private Collection<Transaction> transactions;

交易

@Entity
@Table(name="user_transactions")
public class Transaction{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;

我看不出表中的任何差异,我做的任何动作都有相同的结构。 JPA如何知道如何保存对象并重新构建它们??

1 个答案:

答案 0 :(得分:0)

据我记得,没有默认的CascadeType。 您必须指定一个,例如在您的情况下:

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Collection<Transaction> transactions;

你可以在这里阅读有关级联类型的信息: http://howtodoinjava.com/hibernate/hibernate-jpa-cascade-types/