[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - Bad SQL created from EJB QL for simple join - please help!
Plukh
do-not-reply at jboss.com
Fri Aug 29 07:23:20 EDT 2008
I'm stuck for the last couple of hours trying to understand what could be causing the following problem on JBoss 4.0.5 GA w/ EJB3.
I have two entities:
| package com.airgonomix.entities;
|
| import javax.persistence.*;
| import java.util.Date;
| import java.util.Collection;
| import java.io.Serializable;
|
| @Entity
| @Table(name="holidays")
| public class Holiday implements Serializable {
|
| private int holidayId;
| private Date holidayStart;
| private Date holidayEnd;
|
| @Id
| @GeneratedValue(strategy = GenerationType.IDENTITY)
| @Column(name="hol_int_holiday_id")
| public int getHolidayId() {
| return holidayId;
| }
|
| public void setHolidayId(int holidayId) {
| this.holidayId = holidayId;
| }
|
| @Column(name="hol_dt_holiday_start")
| @Temporal(TemporalType.DATE)
| public Date getHolidayStart() {
| return holidayStart;
| }
|
| public void setHolidayStart(Date holidayStart) {
| this.holidayStart = holidayStart;
| }
|
| @Column(name="hol_dt_holiday_end")
| @Temporal(TemporalType.DATE)
| public Date getHolidayEnd() {
| return holidayEnd;
| }
|
| public void setHolidayEnd(Date holidayEnd) {
| this.holidayEnd = holidayEnd;
| }
| }
|
and
| package com.airgonomix.entities;
|
| import javax.persistence.*;
| import java.io.Serializable;
|
| @Entity
| @Table(name="holidays_by_tenant")
| @IdClass(HolidayByTenantKey.class)
| public class HolidayByTenant implements Serializable {
| private int holidayId;
| private int tenantId;
| private Tenant tenant;
| private Holiday holiday;
|
| @Id
| @Column(name="hol_int_holiday_id")
| public int getHolidayId() {
| return holidayId;
| }
|
| public void setHolidayId(int holidayId) {
| this.holidayId = holidayId;
| }
|
| @Id
| @Column(name="tnt_int_tenant_id")
| public int getTenantId() {
| return tenantId;
| }
|
| public void setTenantId(int tenantId) {
| this.tenantId = tenantId;
| }
|
| @ManyToOne
| @PrimaryKeyJoinColumn(name="tnt_int_tenant_id", referencedColumnName="tnt_int_tenant_id")
| public Tenant getTenant() {
| return tenant;
| }
|
| public void setTenant(Tenant tenant) {
| this.tenant = tenant;
| }
|
| @ManyToOne
| @PrimaryKeyJoinColumn(name="hol_int_holiday_id", referencedColumnName = "hol_int_holiday_id")
| public Holiday getHoliday() {
| return holiday;
| }
|
| public void setHoliday(Holiday holiday) {
| this.holiday = holiday;
| }
| }
|
The last one references another entity, Tenant, but that's not important right now. All tables and columns are explicitly defined, but I can add a screenshot of the database structure, if it'll help.
Now, I'm trying to execute a very simple query - to fetch all Holidays for a given tenantId:
select hbt.holiday from HolidayByTenant hbt where hbt.tenantId = 1
Hibernate generates the following SQL:
| select
| holiday1_.hol_int_holiday_id as hol1_39_,
| holiday1_.hol_dt_holiday_start as hol2_39_,
| holiday1_.hol_dt_holiday_end as hol3_39_
| from
| holidays_by_tenant holidaybyt0_
| inner join
| holidays holiday1_
| on holidaybyt0_.holiday_hol_int_holiday_id=holiday1_.hol_int_holiday_id
| where
| holidaybyt0_.tnt_int_tenant_id=1
|
Look on what column it's trying to join! holiday_hol_int_holiday_id]!Since I don't have such a column in holidays_by_tenant table in my database, the query fails:
| ...
| Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
| at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:647)
| at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:73)
| at com.airgonomix.ejb.utils.UtilsBean.joinTest(UtilsBean.java:224)
| Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'holidaybyt0_.holiday_hol_int_holiday_id' in 'on clause'
|
What could be the reason for Hibernate to create this field mapping? Any help will be greatly appreciated.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4173296#4173296
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4173296
More information about the jboss-user
mailing list