Это моя сущность с составным внешним ключом как PK.
@Entity
@Table(name = "privilege_per_role")
public class PrivilegePerRole extends BaseEntity implements Serializable {
@EmbeddedId
PrivilegePerRoleKey privilegePerRoleKey;
@Embeddable
public static class PrivilegePerRoleKey implements Serializable {
/**
* Default Constructor
*/
public PrivilegePerRoleKey() {
// TODO Auto-generated constructor stub
}
/**
* Generated serial UID
*/
private static final long serialVersionUID = 3511215419L;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "privilege_name", referencedColumnName = "privilege_name", nullable = true, insertable = false, updatable = false)
@JsonBackReference("thePrivilege")
private Privilege thePrivilege;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_name", referencedColumnName = "role_name", nullable = true, insertable = false, updatable = false)
@JsonBackReference("theRole")
private Role theRole;
}
}
Все в порядке, и mvn generate source производит следующую метамодель:
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(PrivilegePerRole.class)
public abstract class PrivilegePerRole_ {
public static volatile SingularAttribute<PrivilegePerRole, PrivilegePerRoleKey> privilegePerRoleKey;
public static final String PRIVILEGE_PER_ROLE_KEY = "privilegePerRoleKey";
}
ПРИМЕЧАНИЕ: У меня нет метамодели EmbeddedClass.
Теперь я хотел бы найти все PrivilegePerRole, которые имеют Privilege.name = "pippo".
Что лучше практиковаться, чтобы получить их, используя встроенный класс?
С общей связанной сущностью я написал бы:
(root, query, cBuilder) -> cBuilder.equal(root.get(PrivilegePerRole_.privilege).get(Privilege_.name), "pippo")
, но я понятия не имею, как достичь того же результата со встроенным классом.