我有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如何知道如何保存对象并重新构建它们??
答案 0 :(得分:0)
据我记得,没有默认的CascadeType。 您必须指定一个,例如在您的情况下:
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Collection<Transaction> transactions;
你可以在这里阅读有关级联类型的信息: http://howtodoinjava.com/hibernate/hibernate-jpa-cascade-types/