-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: @ManyToOne with JOIN FetchMode generating inner join
PostPosted: Fri Oct 02, 2015 11:10 am 
Newbie

Joined: Fri Sep 09, 2011 6:41 am
Posts: 3
Hi,

Reading all the documentation, using @Fetch(FetchMode.JOIN) on a @ManyToOne should by default I believe generate a left outer join, but for me it is always generating an inner join. These are my beans:

Code:
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
* PensionMember entity. @author MyEclipse Persistence Tools
*/
@Entity
@Table(name = "Z_PENSION_MEMBERS", schema = "DANAOS")
public class PensionMember implements java.io.Serializable {

   private static final long serialVersionUID = -4541446336298304689L;

   // Fields

   private Long id;
   private String employeeCode;
   private CrewOfficeEmployee employee;

   // Property accessors
   @Id
   @Column(name = "ID", unique = true, nullable = false, precision = 0)
   public Long getId() {
      return this.id;
   }

   public void setId(Long id) {
      this.id = id;
   }

   @Column(name = "EMPLOYEE_CODE", length = 12)
   public String getEmployeeCode() {
      return this.employeeCode;
   }

   public void setEmployeeCode(String employeeCode) {
      this.employeeCode = employeeCode;
   }

   @ManyToOne( cascade = CascadeType.REFRESH, optional=true )
   @JoinColumn( name = "EMPLOYEE_CODE", insertable = false, updatable = false )
   @Fetch(FetchMode.JOIN)
   public CrewOfficeEmployee getEmployee(){
      return employee;
   }
   
   public void setEmployee( CrewOfficeEmployee employee ){
      this.employee = employee;
   }
}


Code:
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
* CrewOfficeEmployee entity. @author MyEclipse Persistence Tools
*/
@Entity
@Table(name = "Z_CREW_OFFICE_EMPLOYEES", schema = "DANAOS")
public class CrewOfficeEmployee implements java.io.Serializable {

   private static final long serialVersionUID = -5900130959401376537L;

   // Fields

   private String id;
   private Integer crewOfficeJobTitleId;
   private String name;
   private String surname;
   private Date dateOfBirth;
   private Date effectiveJoiningDate;
   private Date joiningDate;
   private Date leavingDate;

   // Property accessors
   @Id
   @Column(name = "ID", unique = true, nullable = false, length = 12)
   public String getId() {
      return this.id;
   }

   public void setId(String id) {
      this.id = id;
   }

   @Column(name = "JOB_TITLE_ID", nullable = false)
   public Integer getCrewOfficeJobTitleId() {
      return crewOfficeJobTitleId;
   }

   public void setCrewOfficeJobTitleId(Integer crewOfficeJobTitleId) {
      this.crewOfficeJobTitleId = crewOfficeJobTitleId;
   }

   @Column(name = "NAME", nullable = false, length = 30)
   public String getName() {
      return this.name;
   }

   public void setName(String name) {
      this.name = name;
   }

   @Column(name = "SURNAME", nullable = false, length = 30)
   public String getSurname() {
      return this.surname;
   }

   public void setSurname(String surname) {
      this.surname = surname;
   }

   @Column(name = "DATE_OF_BIRTH", nullable = false, length = 7)
   public Date getDateOfBirth() {
      return this.dateOfBirth;
   }

   public void setDateOfBirth(Date dateOfBirth) {
      this.dateOfBirth = dateOfBirth;
   }

   @Column(name = "EFFECTIVE_JOINING_DATE", nullable = false, length = 7)
   public Date getEffectiveJoiningDate() {
      return this.effectiveJoiningDate;
   }

   public void setEffectiveJoiningDate(Date effectiveJoiningDate) {
      this.effectiveJoiningDate = effectiveJoiningDate;
   }

   @Column(name = "JOINING_DATE", nullable = false, length = 7)
   public Date getJoiningDate() {
      return this.joiningDate;
   }

   public void setJoiningDate(Date joiningDate) {
      this.joiningDate = joiningDate;
   }

   @Column(name = "LEAVING_DATE", length = 7)
   public Date getLeavingDate() {
      return this.leavingDate;
   }

   public void setLeavingDate(Date leavingDate) {
      this.leavingDate = leavingDate;
   }
}


... and this is the resulting SQL:

Code:
select * from ( select this_.ID as ID11952_6_, this_.EMPLOYEE_CODE as EMPLOYEE3_11952_6_,
employee1_.ID as ID11942_0_, employee1_.JOB_TITLE_ID as JOB2_11942_0_, employee1_.DATE_OF_BIRTH as DATE3_11942_0_, employee1_.EFFECTIVE_JOINING_DATE as EFFECTIVE4_11942_0_,
employee1_.JOINING_DATE as JOINING5_11942_0_, employee1_.LEAVING_DATE as LEAVING7_11942_0_,
employee1_.NAME as NAME11942_0_,employee1_.SURNAME as SURNAME11942_0_
from DANAOS.Z_PENSION_MEMBERS this_
inner join DANAOS.Z_CREW_OFFICE_EMPLOYEES employee1_ on this_.EMPLOYEE_CODE=employee1_.ID)


How come?! Can someone tell me what I'm doing wrong?

Thanks,
Neil

I'm using Hibernate 3.6.10 btw


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.