У меня есть простая ситуация: таблица / сущность OrganizationContact
и таблица сопоставления OrganizationContactType
.
Таким образом, контакт может иметь один или несколько типов, например, контакт может быть ПОСТАВЩИКОМ или ЗАКАЗЧИК или оба.
Ниже сущности OrganizationContact
:
@Entity
@Table(name = "FDE_ORGANIZATION_CONTACT")
public class OrganizationContact {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 200, nullable = false)
private String name;
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "organization_id", nullable = false)
private Organization organization;
@ElementCollection
@Enumerated(EnumType.STRING)
@JoinTable(
name = "FDE_ORGANIZATION_CONTACT_TYPE",
joinColumns = {@JoinColumn(name = "org_contact_id", referencedColumnName = "id")})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Column(name = "contact_type")
private Set<ContactTypeEnum> types = new HashSet<>();
public OrganizationContact() {}
public OrganizationContact(Long id, Set<ContactTypeEnum> types) {
this.id = id;
this.types = types;
}
В моем запросе мне нужно выбрать только id
и набор types
. Ниже запроса:
public List<OrganizationContact> findAllContacts() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<OrganizationContact> cq = cb.createQuery(OrganizationContact.class);
Root<OrganizationContact> root = cq.from(OrganizationContact.class);
// JOIN TESTS
// Join<OrganizationContact, Set<ContactTypeEnum>> join = root.join("types");
// Join<OrganizationContact, ContactTypeEnum> join = root.join("types");
// JoinSet<OrganizationContact, ContactTypeEnum> join = root.joinSet("types");
cq.multiselect(
root.get(OrganizationContact_.id),
// MY DIFFICULT IS HERE
// SELECT TESTS
// root.get("types")
// join
);
cq.distinct(true);
TypedQuery<OrganizationContact> typedQuery = em.createQuery(cq);
return typedQuery.getResultList();
}
Мне сложно понять метод выбора Set
. Для каждого идентификатора контакта мне нужен набор типов.
Если я посмотрю запрос Hibernate, я увижу:
select distinct organizati0_.id as col_0_0_, . as col_1_0_ from ......
Проблема здесь:
. as col_1_0_
Hibernate не может выбрать столбец (до точки).
Есть предложения?
Большое спасибо