Hibernate - LEFT JOIN vs. JOIN

Status
Nicht offen für weitere Antworten.

damien

Aktives Mitglied
Hallo,

folgender Sachverhalt ist gegeben:

Eine CD hat mehrere Interpreten, ein Interpret hat mehrere CDs !

Ist der Code so in Ordnung ? Was für einen Unterschied würde es machen wenn ich statt dem JOIN ein LEFT JOIN mache. Und, NUR mit einem FETCH würden die Interpreten mitgeladen werden, richtig ?

Java:
@Entity
@Table(name="cd")
@NamedQueries({
   @NamedQuery(name = "findCdByInterpretName",
            query = "SELECT c
                  "FROM Cd c JOIN c.interpeten i" +
                  "WHERE i.name =: " + "name")
})
public class Cd implements Java.io.Serializable {

   @Id
   @GeneratedValue(strategy=AUTO, generator="cd_sequence_name")
   @SequenceGenerator(name="cd_sequence_name", sequenceName="cd_id_seq", allocationSize=1)
   @Column(name="id, nullable = false)
   private Long id = null;
   
   @Column(name="anzahlTitel", nullable=false)
   private int anzahlTitel;
   
   @ManyToMany
   @JoinTable(name="cd_interpreten",
   joinColumns=@JoinColumn(name="cd_fk"),
   inverseJoinColumns=@JoinColumn(name="interpret_fk"))
   @OrderBy("id ASC")
   private List<Interpret> interpreten;

   public Cd() {
      super();
   }
   
   //GETTER
   
   //SETTER
   
   //@Override toString(), getHashCode(), equals()
 
Wenn Du nur JOIN im HQL schreibst, dann entscheidet imo Hibernate selbst, ob er das in ein SQL INNER JOIN oder LEFT JOIN übersetzt.

Das FETCH bedeutet, dass die entsprechenden Daten auch als Java Objekte von Hibernate angelegt werden. Wenn Du also das FETCH weglässt, dann kannst Du Dich zwar im HQL auf die Daten beziehen (z.B. wie in Deinem WHERE mit i.name = ?), aber in den CD-Objekten sind die Interpreten dann nicht initialisiert (also lazy).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben