JPA通过id创建对象

时间:2016-01-15 09:26:34

标签: jpa spring-data spring-data-jpa

我有一个以下的JPA实体:

SourceData:= _
"'Infolog Data'!R2C1:R3800C24"

为了将新的@Entity @Table(name = "sessions") public class Session extends BaseEntity implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @OneToOne @JoinColumn(name = "user_id") private User user; ... } 对象插入数据库,我需要执行以下步骤:

  1. 从db
  2. 中选择Session
  3. 创建新的user对象,将Session设置为此user对象,然后调用session
  4. 如果我知道sessionRepository.save(session),是否可以避免步骤#1?我不想在可能的情况下对我的数据库进行冗余选择。

2 个答案:

答案 0 :(得分:1)

使用EntityManager.getReference()代替EntityManager.find()(在Spring-data-jpa crud存储库中,此操作名为getOne())。

这将返回一个惰性的,未初始化的User代理,而不执行任何SQL查询。当然,您最好在数据库中使用外键约束,以确保在尝试为未使用的用户插入新会话时插入失败。

答案 1 :(得分:1)

您可以使用一个API。

如果您使用JPA,则可以使用entityManager.getReference()来加载用户。这不会调用数据库,除非您对结果实例执行某些操作。

与此类似的Hibernate是session.load(),其行为方式相同。