我有一个简单的实体,其中的countUsing字段指定了其他表中使用的计数。它是带有注释Formula
的子查询。
而且我想在一种情况下忽略公式中的执行查询,但其他子查询必须调用。
我的实体:
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(generator = "roles_id_seq", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "roles_id_seq", sequenceName = "roles_id_seq", allocationSize = 1)
@Column(name = "id")
private Long id;
@Column(name = "\"NAME\"")
private String name;
@Convert(converter = LocalDateTimeAttributeConverter.class)
private LocalDateTime insertDate;
@Convert(converter = LocalDateTimeAttributeConverter.class)
private LocalDateTime updateDate;
@Formula("(SELECT COUNT(*) FROM user_roles us WHERE us.id_role = id)")
private Integer countUsing;
}
我如何实现目标,我想想字段
countUsing
的任何注释中的标志。注释
Formula
仅具有value
属性。 最佳答案
我了解您要在此属性上使用FetchType.LAZY。
因此,您不能在类的@Formula属性中直接使用LAZY。
解决方案是创建一个包装器类,该类与包含您的Formula属性的类具有oneToOne关系,如下所示:
@Entity
@Table(name = "roles")
public class Role{
... /*other attributes*/
@OneToOne(fetch = FetchType.LAZY, mappedBy = "role")
private RoleCounting roleCouting;
}
@Entity
@Table(name = "roles")
public class RoleCounting{
@Id
@Column(name="id", insertable = false, updatable = false)
private Long id;
@OneToOne(fetch = FetchType.LAZY)
@MapsId
@JoinColumn(name = "id", insertable = false, updatable = false)
private Role role;
@Formula("(SELECT COUNT(*) FROM user_roles us WHERE us.id_role = id)")
private Integer countUsing;
}
这样,子查询将仅在您调用时执行:
role.getRoleCounting().getCountUsing();
关于java - 在一种情况下忽略@Formula,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49784729/