Wie verkettet oder summiert man die Felder der Objektsammlung, auf die in der JPA-Entität als @OneToMany verwiesen wird,Java

Java-Forum
Anonymous
 Wie verkettet oder summiert man die Felder der Objektsammlung, auf die in der JPA-Entität als @OneToMany verwiesen wird,

Post by Anonymous »

Ich habe zwei JPA-Entitäten:

Code: Select all

@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;

}
und

Code: Select all

@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;
}
Ich möchte die Auswahl als RegistryGroupRow-Klassenobjekt darstellen:

Code: Select all

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;
}
}
Ich habe eine Funktion wie diese:

Code: Select all

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
);
Es würde nicht funktionieren, da RegistryGroupEntity_.services eine Sammlung von ServiceEntity ist, aber ich brauche hier eine Verkettung auf ServiceEntity._name. Wie kann ich so etwas wie cb.concat(registryGroup.get(RegistryGroupEntity_.services).get(ServiceEntity._name)) für den letzten Parameter des RegistryRowGroup-Konstruktors aufrufen? Wie kann ich CriteriaBuilder dazu bringen, das objektspezifische Feld der Sammlung zu durchlaufen und seine Werte zu sammeln/konkatieren/zu summieren?
Für concat möchte ich mit Trennzeichen zu String konkatieren. Zum Sammeln möchte ich in List.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post