JPA testsBuilder для классов @Embeddable, содержащих отношения @ManyToOne - PullRequest
1 голос
/ 29 февраля 2020

Это моя сущность с составным внешним ключом как 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")

, но я понятия не имею, как достичь того же результата со встроенным классом.

...