【问题标题】:JPA, save relation without querying entitiesJPA,保存关系而不查询实体
【发布时间】:2017-08-16 07:28:59
【问题描述】:

我有这个实体代表两个其他实体之间的关系。

我想保存关系,而不必在保存之前获得角色和权限。

我想要类似 .save(roleId, privilegeId) 这样我就不必在保存关系之前访问数据库。

有可能吗?如何实现?

谢谢

@Entity
@Table(name = "security_role_privilege")
public class RolePrivilege implements Serializable {

  private static final long serialVersionUID = -4788066966268187121L;

  @EmbeddedId protected RolePrivilegeId id;

  @ManyToOne
  @JoinColumn(name = "role_id", insertable = false, updatable = false)
  protected Role role;

  @ManyToOne
  @JoinColumn(name = "privilege_id", insertable = false, updatable = false)
  protected Privilege privilege;

  protected RolePrivilege() {}


  public RolePrivilege(Role role, Privilege privilege) {
    super();
    this.role = role;
    this.privilege = privilege;
    this.id = new RolePrivilegeId(role.getId(), privilege.getId());
    this.privilege.getRolePrivileges().add(this);
    this.role.getRolePrivileges().add(this);
  }

  public RolePrivilegeId getId() {
    return this.id;
  }

  public Role getRole() {
    return this.role;
  }

  public Privilege getPrivilege() {
    return this.privilege;
  }
}

这是该实体的 Spring Data JPA 存储库

@Repository
public interface RolePrivilegeRepository extends JpaRepository<RolePrivilege, RolePrivilegeId> {}

【问题讨论】:

    标签: java spring hibernate spring-data-jpa


    【解决方案1】:

    使用原始EntityManager,您可以使用em.getReference(Class&lt;T&gt; clazz, Object primaryKey) 仅获取对您希望链接的实体的引用,而无需实际获取实体的数据。

    【讨论】:

    • 我试过了,但是当我使用 em.getReference() 时,我可以在日志中看到一个 SELECT 查询
    • 它确实会命中数据库(它必须确保实体存在),但它(在大多数情况下)是比使用find() 更轻量级的操作。
    • 好的,我会接受这个解决方案,看看我将来是否有任何性能问题。谢谢
    • 好吧,你没有其他选择。是find()getReference()
    • 可能有点晚了,但您可以获得与使用 getById 描述的 Kayaman 相同的行为
    猜你喜欢
    • 2015-08-14
    • 2023-03-04
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多