j'ai une requête SQLEclipseLink: Créer des objets de requête JOIN
SELECT * FROM Thing AS a JOIN Thing_Property AS b ON a.id=b.Thing_ID
JOIN Property AS c ON b.properties_ID = c.id
JOIN Item AS d ON c.item_ID = d.id
ORDER BY a.name, d.name
et je EclipseLink pour créer mon modèle d'objet avec elle. Voici le modèle:
@SuppressWarnings("serial")
@Entity
public class Thing implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
private String name;
@OneToMany(cascade=CascadeType.ALL)
@PrivateOwned
private List<Property> properties = new ArrayList<Property>();
...
// getter and setter following here
}
public class Property implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@OneToOne
private Item item;
private String value;
...
// getter and setter following here
}
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
private String name;
....
// getter and setter following here
}
// Code end
mais je ne peux pas comprendre, comment faire EclipseLink créer le modèle à partir de cette requête. Pouvez-vous aider?
Merci! Mais malheureusement cela fonctionne mais pas de la manière souhaitée. Au lieu d'avoir la propriété dans les propriétés de liste, j'obtiens un mappage 1: 1. Cela signifie que je devrais avoir 10 objets Thing avec 100 objets Property dans la liste des propriétés, mais j'ai maintenant 1000 objets Thing avec chaque objet 1 Property dans la liste des propriétés. Eclipselink ne fait pas le groupement. Pouvez-vous aider? – Raven
Modifiez votre requête pour utiliser "select distinct a. *" Qui devrait réduire le nombre d'objets Thing retournés. Si vous tentez réellement de lire tous ces objets liés en une seule grande requête, je recommande d'utiliser l'indicateur de requête "eclipselink.join-fetch" de JPQL et EclipseLink pour récupérer les objets associés. Requête de requête = entityManager.createQuery ("Sélectionnez t de Thing T"); query.setHint ("eclipselink.join-fetch", "t.properties.item"); Vous devriez aussi pouvoir ajouter les indications à la requête native si nécessaire, mais il est préférable d'utiliser JPQL quand vous le pouvez car il est plus facile à maintenir. –