[jboss-user] [EJB3] - Inverse OneToOne and JoinTable problem

Chris Ball do-not-reply at jboss.com
Fri Jan 21 12:39:39 EST 2011


Chris Ball [http://community.jboss.org/people/chrisxl] created the discussion

"Inverse OneToOne and JoinTable problem"

To view the discussion, visit: http://community.jboss.org/message/582412#582412

--------------------------------------------------------------
I have come across a problem in JBoss 4.2.2 (hibernate 3.2.4) where I cannot insert into or select from an entity (CompanyCar) that is the inverse-side of a @OneToOne join to a second entity (Employee), when the second entity has a @ManyToOne join that uses a @JoinTable.

This is also a problem in JBoss 5.1, but it appears to have been “fixed” in JBoss 6.0 (hibernate 3.6). Unfortunately we are not yet in a position to consider upgrading the version of JBoss we use.

I am looking for a workaround that we can use for JBoss 4.2.2. Also I’d like to know if this looks like a genuine bug, or whether I have got something wrong with my entity model that for some reason the hibernate spec has been changed to allow in the later release.

My entity model:


public class CompanyCar implements Serializable {
 
 
      private Long id;
      private Employee employee;
 
 
      @Id
      @Column(name = "id", nullable = false)
      public Long getID() {
            return id;
      }
 
 
      public void setID(final Long id) {
            this.id = id;
      }
 
 
      @OneToOne(mappedBy="car",optional = true, fetch = FetchType.LAZY)
      public Employee getEmployee() {
            return employee;
      }
 
      public void setEmployee(final Employee employee) {
            this.employee = employee;
      }
}
 
 
public class EmployeeTeam implements Serializable {
 
 
      private String teamName;
      private Collection<Employee> members;
 
 
      @Id
      @Column(name = "teamname", length = 30, nullable = false)
      public String getTeamName() {
            return teamName;
      }
 
 
      public void setTeamName(final String teamName) {
            this.teamName = teamName;
      }
 
 
      @OneToMany(mappedBy = "team")
      public Collection<Employee> getMembers() {
            return members;
      }
 
 
      public void setMembers(final Collection<Employee> members) {
            this.members = members;
      }
}
 
 
public class Employee implements Serializable {
 
 
      private String employeeID;
      private CompanyCar car;
      private EmployeeTeam team;
 
      @Id
      @Column(name = "employeeid", length = 36, nullable = false)
      public String getEmployeeID() {
            return employeeID;
      }
 
 
      public void setEmployeeID(final String employeeID) {
            this.employeeID = employeeID;
      }
 
 
      @OneToOne(optional = true, fetch = FetchType.LAZY)
      @JoinColumn(name = "companycarid", referencedColumnName = "id")
      public CompanyCar getCar() {
            return car;
      }
 
 
      public void setCar(final CompanyCar car) {
            this.car = car;
      }
 
      @ManyToOne(fetch = FetchType.LAZY)
      @JoinTable(
                  name = "employeeteammembers", 
                  joinColumns = { @JoinColumn(name = "employee_fk", referencedColumnName ="employeeid") }, 
                  inverseJoinColumns = @JoinColumn(name = "team_fk", referencedColumnName = "teamname")
            )
      public EmployeeTeam getTeam() {
            return team;
      }
 
 
      public void setTeam(final EmployeeTeam team) {
            this.team = team;
      }
}


On inserting a CompanyCar:

            final CompanyCar car = new CompanyCar();
            car.setID(1L);
            entityManager.persist(car);


not-null property references a null or transient value: uk.co.exel.test.CompanyCar.employee

On loading a CompanyCar:

Invalid column name 'companycarid'

The following SQL is generated by hibernate. It is attempting to join the CompanyCar directly to EmployeeTeam?

select companycar0_.id as id0_, companycar0_1_.employee_fk as employee0_3_ 
from companycars companycar0_ 
left outer join employeeteams companycar0_1_ on companycar0_.id=companycar0_1_.companycarid


Many thanks for any comments / suggestions.

Chris.
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/582412#582412]

Start a new discussion in EJB3 at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2029]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20110121/6343fe0c/attachment-0001.html 


More information about the jboss-user mailing list