Как объединить или суммировать поля коллекции объектов, указанные как @OneToMany в объекте JPA с помощью CriteriaBuilderJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как объединить или суммировать поля коллекции объектов, указанные как @OneToMany в объекте JPA с помощью CriteriaBuilder

Сообщение Anonymous »

У меня есть две сущности JPA:

Код: Выделить всё

@Entity
@Table(name = "registry_group")
public class RegistryGroupEntity {
@Id
@SequenceGenerator(name="registry_groups_gen", sequenceName="registry_groups_id_seq", allocationSize = 1)
@GeneratedValue(generator="registry_groups_gen")
private Long id;
@Column(name = "name")
private String name;

@OneToMany(mappedBy = "registryGroup")
private Collection services;

}
и

Код: Выделить всё

@Entity
@Table(name = "services")
public class ServiceEntity {
@Id
@SequenceGenerator(name="service_gen", sequenceName="services_id_seq", allocationSize = 1)
@GeneratedValue(generator="service_gen")
private Integer id;
@Column(nullable = false, length = 100)
private String name;
}
Я хотел бы представить выбор как объект класса RegistryGroupRow:

Код: Выделить всё

public class RegistryGroupRow {
private Long id;
private String name;
private String serviceNames;

public RegistryGroupRow(Long id, String name, List serviceNames) {
this.id = id;
this.name = name;
this.serviceNames = serviceNames;
}
}
У меня есть такая функция:

Код: Выделить всё

public List getRegistryGroupRows(RegistryGroupFilter filter, Integer offset, Integer limit) {

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery c = cb.createQuery(RegistryGroupRow.class);
Root registryGroup = c.from(RegistryGroupEntity.class);

c.multiselect(registryGroup.get(RegistryGroupEntity_.id),
registryGroup.get(RegistryGroupEntity_.name),
registryGroup.get(RegistryGroupEntity_.services) //problem is here
);
Это не сработает, поскольку RegistryGroupEntity_.services представляет собой коллекцию ServiceEntity, но здесь мне нужна конкатенация ServiceEntity._name. Как я могу вызвать что-то вроде cb.concat(registryGroup.get(RegistryGroupEntity_.services).get(ServiceEntity._name)) для последнего параметра конструктора RegistryRowGroup? Как заставить CriteriaBuilder проходить через определенное поле объектов коллекции и собирать/объединять/суммировать его значения?
Для объединения я хотел бы объединить с разделителем в строку. Для сбора я хотел бы собрать его в List.

Подробнее здесь: https://stackoverflow.com/questions/759 ... netomany-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»