Java 通过getter获取对象与通过存储库获取对象的区别

Java 通过getter获取对象与通过存储库获取对象的区别,java,spring,spring-data,spring-data-jpa,Java,Spring,Spring Data,Spring Data Jpa,假设我有两个实体类: @Entity public class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @OneToMany(cascade = CascadeType.ALL, mappedBy = "user") List<Order> orderList; /* getters and setters */ } @

假设我有两个实体类:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    List<Order> orderList;

    /* getters and setters */

}

@Entity
public class Order {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @ManyToOne
    private User user;

    /* getters and setters */

}
方法2:

List<Order> orderList = user.getOrderList();
List orderList=user.getOrderList();
这两种方法有什么区别吗?我什么时候应该使用方法1,什么时候应该使用方法2


感谢

根据提取策略和延迟加载的具体配置,从数据库实际加载数据的时间和方式可能会有所不同。但这并不是您决定使用哪种访问路径的原因

Spring数据背后的一个非常核心的思想是中描述的聚合。每个聚合应有一个存储库。因此问题变成了:
User
Order
是同一个聚合的一部分吗?如果假设您坚持Spring数据背后的理念,那么存在
User
Order
的存储库这一事实意味着它们都是聚合根,因此不能成为同一聚合的一部分。此外,因此我不会使用引用并实际删除它(而且我肯定会删除
级联。All


但是您显然没有根据该参数做出设计决策,因此您可以决定两者都是同一聚合的一部分,并删除其中一个存储库。

如果您碰巧有一个用户的引用,您可能会使用方法2。否则您可能会这样做。@crick\u 007不,没有。如果订单已经存在在会话中,存储库将按会话中的方式返回它们,即使它使用查询来查找它们。由于事务隔离,无论如何也不会有任何区别。@cricket_007您的编写方式是对的,在这两种情况下您都需要一个用户!但我可以想象findByUser只需要一个主键。
@Autowired
OrderRepository orderRepository;

List<Order> orderList = orderRepository.findByUser(user);
List<Order> orderList = user.getOrderList();