Jpa 一对一和多对一的关系

Jpa 一对一和多对一的关系,jpa,one-to-many,many-to-one,Jpa,One To Many,Many To One,我有两个表映射了@OneToMany和@ManyToOne及其setter和getter,因此一个用户可以有多个事务,而一个事务只能有一个用户 如果我在用户列表中添加了一个事务,数据将正确地进入表中,并且可以使用用户的getter检索事务。但当我使用事务中的getter查找其所有者时,它并没有从users表中找到相应的用户 如果我为一个事务设置了一个用户,那么也可以使用反向,因为数据会持久化到数据库中,并且可以使用事务的getter检索用户,但是使用用户的getter不会显示任何事务 唯一的方法

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

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

如果我为一个事务设置了一个用户,那么也可以使用反向,因为数据会持久化到数据库中,并且可以使用事务的getter检索用户,但是使用用户的getter不会显示任何事务

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

使用者


我看不出表中有什么不同,我做的任何动作都是一样的。JPA如何知道我是如何保存对象并重新构建它们的…?

据我所知,没有默认的级联类型。 您必须指定一个,例如在您的案例中:

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Collection<Transaction> transactions;
@OneToMany(mappedBy=“user”,cascade=CascadeType.ALL)
私人收款交易;
您可以在此处阅读有关级联类型的信息:

之所以会这样,是因为JPA就是这样指定的。它使用POJO,如果将字段保留为null,则该字段将为null。如果不将事务添加到列表中,列表将不包含该事务。由你来保持你的物体的连贯性。不过,JPA会在从数据库中读取连贯对象时将其返回给您。但是,有没有其他方法可以使其按我的要求工作?没有。如果要向用户添加事务,并设置事务的用户,则需要对其进行编码。JPA不会为您这样做。我看不出表中有什么不同,我做的任何操作,两个表都有相同的结构。所以它可以很好地说,我已经在列表中添加了一个事务,或者认为我已经为事务设置了一个用户。JPA如何知道我是如何保存这些对象并重新构建它们的…?它不需要知道您是如何创建对象的。正如我所说,当JPA从数据库中填充对象时,它将做正确的事情:事务将设置ts user,用户将在列表中设置其事务。但是,当您创建这些对象时,您负责设置事务的用户并将事务添加到列表中。
@Entity
@Table(name="user_transactions")
public class Transaction{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Collection<Transaction> transactions;