-->
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: InherithanceType.Joined - Generate sql error - Oracle
PostPosted: Thu Jun 15, 2006 4:18 am 
Newbie

Joined: Wed Jul 06, 2005 7:23 am
Posts: 2
Hi, I have some trouble with my code.
I have two classes Person and Member (Member extends Person). I want work with two tables (Person and Member) and I use the inheritanceType.Joined Strategy.

This is my code :
Code:
package be.fgov.caamihziv.commons.fdmassu.person;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import be.fgov.caamihziv.commons.fdmassu.infoContact.InfoContact;

@Entity
@Table(name="PERSON")
@Inheritance(strategy=InheritanceType.JOINED)
@SequenceGenerator(name="PSN_GEN", sequenceName="PSN_SEQ")
public abstract class Person {
   protected long id;
    private int title;
    private String lastName;
    private String firstName1;
    private String firstName2;
    private int sex;
    private int preferredLang;
    private int administrativeLang;
    private InfoContact infoContact;
   
   
   /**
    * @return Returns the id.
    */
    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PSN_GEN")
   public long getId() {
      return id;
   }
   /**
    * @param id The id to set.
    */
   public void setId(long id) {
      this.id = id;
   }
   /**
    * @return Returns the administrativeLang.
    */
   @Column(name="FK_R_LGE_ID_ADMIN")
   public int getAdministrativeLang() {
      return administrativeLang;
   }
   /**
    * @param administrativeLang The administrativeLang to set.
    */
   public void setAdministrativeLang(int administrativeLang) {
      this.administrativeLang = administrativeLang;
   }
   /**
    * @return Returns the firstName1.
    */
   @Column(name="FIRSTNAME1")
   public String getFirstName1() {
      return firstName1;
   }
   /**
    * @param firstName1 The firstName1 to set.
    */
   public void setFirstName1(String firstName1) {
      this.firstName1 = firstName1;
   }
   /**
    * @return Returns the firstName2.
    */
   @Column(name="FIRSTNAME2")
   public String getFirstName2() {
      return firstName2;
   }
   /**
    * @param firstName2 The firstName2 to set.
    */
   public void setFirstName2(String firstName2) {
      this.firstName2 = firstName2;
   }
   /**
    * @return Returns the infoContact.
    */
   @Transient
   public InfoContact getInfoContact() {
      return infoContact;
   }
   /**
    * @param infoContact The infoContact to set.
    */
   public void setInfoContact(InfoContact infoContact) {
      this.infoContact = infoContact;
   }
   /**
    * @return Returns the lastName.
    */
   @Column(name="LASTNAME")
   public String getLastName() {
      return lastName;
   }
   /**
    * @param lastName The lastName to set.
    */
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
   /**
    * @return Returns the preferredLang.
    */
   @Column(name="FK_R_LGE_ID_PREFERRED")
   public int getPreferredLang() {
      return preferredLang;
   }
   /**
    * @param preferredLang The preferredLang to set.
    */
   public void setPreferredLang(int preferredLang) {
      this.preferredLang = preferredLang;
   }
   /**
    * @return Returns the sex.
    */
   @Column(name="FK_R_GDR_ID")
   public int getSex() {
      return sex;
   }
   /**
    * @param sex The sex to set.
    */
   public void setSex(int sex) {
      this.sex = sex;
   }
   /**
    * @return Returns the title.
    */
   @Column(name="FK_R_TTE_ID")
   public int getTitle() {
      return title;
   }
   /**
    * @param title The title to set.
    */
   public void setTitle(int title) {
      this.title = title;
   }
   
   
}

Code:
package be.fgov.caamihziv.commons.fdmassu.person;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;

import be.fgov.caamihziv.commons.fdmassu.infoContact.InfoContactMember;
import be.fgov.caamihziv.commons.fdmassu.reference.institution.RegionalOffice;

/**
*
* @author ipa
*
*/
@Entity
@Table(name="MEMBER")

public class Member extends Person  {
    private int numInternal;
    private int oldIVerzekGd;
    private int oldIVerzekRg;
    private int oldIVerzekNr;
    private int oldIVerzekCd;
    private long niss;
    private Date dateBirth;
    private Date dateDeath;
    private boolean nationalRegistry;
    private boolean avz;
    private int civilState;
    private String nationality;
    private int state;

    /**
     * @supplierCardinality 1
     * @clientCardinality 0..*
     * @clientQualifier is pac of
     * @supplierQualifier is the holder of*/
    private Member memberHolder;

    /**
     * @clientCardinality 1
     * @supplierCardinality 1..*
     */
    private InfoContactMember infoContactMember;
    private RegionalOffice currentRegionalOffice;
     
   /**
    * @return Returns the avz.
    */
   public boolean isAvz() {
      return avz;
   }
   /**
    * @param avz The avz to set.
    */
   public void setAvz(boolean avz) {
      this.avz = avz;
   }
   /**
    * @return Returns the civilState.
    */
   @Column(name="FK_R_MRL_STS_ID")
   public int getCivilState() {
      return civilState;
   }
   /**
    * @param civilState The civilState to set.
    */
   public void setCivilState(int civilState) {
      this.civilState = civilState;
   }
   /**
    * @return Returns the currentRegionalOffice.
    */
   @Transient
   public RegionalOffice getCurrentRegionalOffice() {
      return currentRegionalOffice;
   }
   /**
    * @param currentRegionalOffice The currentRegionalOffice to set.
    */
   public void setCurrentRegionalOffice(RegionalOffice currentRegionalOffice) {
      this.currentRegionalOffice = currentRegionalOffice;
   }
   /**
    * @return Returns the dateBirth.
    */
   @Column(name="BIRTHDATE")
   @Temporal(TemporalType.DATE)   
   public Date getDateBirth() {
      return dateBirth;
   }
   /**
    * @param dateBirth The dateBirth to set.
    */
   public void setDateBirth(Date dateBirth) {
      this.dateBirth = dateBirth;
   }
   /**
    * @return Returns the dateDeath.
    */
   @Column(name="DEATHDATE")
   @Temporal(TemporalType.DATE)
   public Date getDateDeath() {
      return dateDeath;
   }
   /**
    * @param dateDeath The dateDeath to set.
    */
   public void setDateDeath(Date dateDeath) {
      this.dateDeath = dateDeath;
   }

   /**
    * @return Returns the infoContactMember.
    */
    @Transient
   public InfoContactMember getInfoContactMember() {
      return infoContactMember;
   }
   /**
    * @param infoContactAssure The infoContactAssure to set.
    */
   public void setInfoContactAssure(InfoContactMember infoContactMember) {
      this.infoContactMember = infoContactMember;
   }
   /**
    * @return Returns the memberHolder.
    */
   @Transient
   public Member getMemberHolder() {
      return memberHolder;
   }
   /**
    * @param memberHolder The memberHolder to set.
    */
   public void setMemberHolder(Member memberHolder) {
      this.memberHolder = memberHolder;
   }
   /**
    * @return Returns the nationality.
    */
   @Column(name="NATIONALITY")   
   public String getNationality() {
      return nationality;
   }
   /**
    * @param nationality The nationality to set.
    */
   public void setNationality(String nationality) {
      this.nationality = nationality;
   }
   /**
    * @return Returns the nationalRegistry.
    */
   @Column(name="NATIONAL_REGISTRY")
   public boolean isNationalRegistry() {
      return nationalRegistry;
   }
   /**
    * @param nationalRegistry The nationalRegistry to set.
    */
   public void setNationalRegistry(boolean nationalRegistry) {
      this.nationalRegistry = nationalRegistry;
   }
   /**
    * @return Returns the niss.
    */
   @Column(name="NISS")
   public long getNiss() {
      return niss;
   }
   /**
    * @param niss The niss to set.
    */
   public void setNiss(long niss) {
      this.niss = niss;
   }
   /**
    * @return Returns the numInternal.
    */
   @Column(name="NUM_INTERNAL")
   public int getNumInternal() {
      return numInternal;
   }
   /**
    * @param numInternal The numInternal to set.
    */
   public void setNumInternal(int numInternal) {
      this.numInternal = numInternal;
   }
   /**
    * @return Returns the oldIVerzekCd.
    */
   @Column(name="OLD_VERZEK_CD")
   public int getOldIVerzekCd() {
      return oldIVerzekCd;
   }
   /**
    * @param oldIVerzekCd The oldIVerzekCd to set.
    */
   public void setOldIVerzekCd(int oldIVerzekCd) {
      this.oldIVerzekCd = oldIVerzekCd;
   }
   /**
    * @return Returns the oldIVerzekGd.
    */
   @Column(name="OLD_VERZEK_GD")
   public int getOldIVerzekGd() {
      return oldIVerzekGd;
   }
   /**
    * @param oldIVerzekGd The oldIVerzekGd to set.
    */
   public void setOldIVerzekGd(int oldIVerzekGd) {
      this.oldIVerzekGd = oldIVerzekGd;
   }
   /**
    * @return Returns the oldIVerzekNr.
    */
   @Column(name="OLD_VERZEK_NR")
   public int getOldIVerzekNr() {
      return oldIVerzekNr;
   }
   /**
    * @param oldIVerzekNr The oldIVerzekNr to set.
    */
   public void setOldIVerzekNr(int oldIVerzekNr) {
      this.oldIVerzekNr = oldIVerzekNr;
   }
   /**
    * @return Returns the oldIVerzekRg.
    */
   @Column(name="OLD_VERZEK_RG")
   public int getOldIVerzekRg() {
      return oldIVerzekRg;
   }
   /**
    * @param oldIVerzekRg The oldIVerzekRg to set.
    */
   public void setOldIVerzekRg(int oldIVerzekRg) {
      this.oldIVerzekRg = oldIVerzekRg;
   }
   /**
    * @return Returns the state.
    */
   @Column(name="FK_R_MBR_STE_ID")   
   public int getState() {
      return state;
   }
   /**
    * @param state The state to set.
    */
   public void setState(int state) {
      this.state = state;
   }
}


For testing
Code:
        Member alb=testDAO.getMember((long)4505);
          System.out.println(alb.getId());


Error
Code:
Hibernate: select member0_.id as id1_0_, member0_1_.FK_R_LGE_ID_ADMIN as FK2_1_0_, member0_1_.FIRSTNAME1 as FIRSTNAME3_1_0_, member0_1_.FIRSTNAME2 as FIRSTNAME4_1_0_, member0_1_.LASTNAME as LASTNAME1_0_, member0_1_.FK_R_LGE_ID_PREFERRED as FK6_1_0_, member0_1_.FK_R_GDR_ID as FK7_1_0_, member0_1_.FK_R_TTE_ID as FK8_1_0_, member0_.FK_R_MBR_STE_ID as FK2_2_0_, member0_.avz as avz2_0_, member0_.FK_R_MRL_STS_ID as FK4_2_0_, member0_.BIRTHDATE as BIRTHDATE2_0_, member0_.DEATHDATE as DEATHDATE2_0_, member0_.NATIONALITY as NATIONAL7_2_0_, member0_.NATIONAL_REGISTRY as NATIONAL8_2_0_, member0_.NISS as NISS2_0_, member0_.NUM_INTERNAL as NUM10_2_0_, member0_.OLD_VERZEK_CD as OLD11_2_0_, member0_.OLD_VERZEK_GD as OLD12_2_0_, member0_.OLD_VERZEK_NR as OLD13_2_0_, member0_.OLD_VERZEK_RG as OLD14_2_0_, member0_.BIRTHPLACE as BIRTHPLACE2_0_, member0_.DEATHPLACE as DEATHPLACE2_0_, decode(member0_.id, 1) as clazz_0_ from MEMBER member0_, PERSON member0_1_, MEMBER member0_2_ where member0_.id=member0_1_.id and member0_.id=member0_2_.id and member0_.id=?
WARN  JDBCExceptionReporter.logExceptions - SQL Error: 938, SQLState: 42000
WARN  JDBCExceptionReporter.logExceptions - SQL Error: 938, SQLState: 42000
ERROR JDBCExceptionReporter.logExceptions - ORA-00938: not enough arguments for function

ERROR JDBCExceptionReporter.logExceptions - ORA-00938: not enough arguments for function

Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not load an entity: [be.fgov.caamihziv.commons.fdmassu.person.Member#4505]; bad SQL grammar [select member0_.id as id1_0_, member0_1_.FK_R_LGE_ID_ADMIN as FK2_1_0_, member0_1_.FIRSTNAME1 as FIRSTNAME3_1_0_, member0_1_.FIRSTNAME2 as FIRSTNAME4_1_0_, member0_1_.LASTNAME as LASTNAME1_0_, member0_1_.FK_R_LGE_ID_PREFERRED as FK6_1_0_, member0_1_.FK_R_GDR_ID as FK7_1_0_, member0_1_.FK_R_TTE_ID as FK8_1_0_, member0_.FK_R_MBR_STE_ID as FK2_2_0_, member0_.avz as avz2_0_, member0_.FK_R_MRL_STS_ID as FK4_2_0_, member0_.BIRTHDATE as BIRTHDATE2_0_, member0_.DEATHDATE as DEATHDATE2_0_, member0_.NATIONALITY as NATIONAL7_2_0_, member0_.NATIONAL_REGISTRY as NATIONAL8_2_0_, member0_.NISS as NISS2_0_, member0_.NUM_INTERNAL as NUM10_2_0_, member0_.OLD_VERZEK_CD as OLD11_2_0_, member0_.OLD_VERZEK_GD as OLD12_2_0_, member0_.OLD_VERZEK_NR as OLD13_2_0_, member0_.OLD_VERZEK_RG as OLD14_2_0_, member0_.BIRTHPLACE as BIRTHPLACE2_0_, member0_.DEATHPLACE as DEATHPLACE2_0_, decode(member0_.id, 1) as clazz_0_ from MEMBER member0_, PERSON member0_1_, MEMBER member0_2_ where member0_.id=member0_1_.id and member0_.id=member0_2_.id and member0_.id=?]; nested exception is java.sql.SQLException: ORA-00938: not enough arguments for function

java.sql.SQLException: ORA-00938: not enough arguments for function

   at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
   at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
   at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
   at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
   at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
   at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:799)
   at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
   at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
   at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)
   at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
   at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)
   at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
   at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
   at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
   at org.hibernate.loader.Loader.doQuery(Loader.java:662)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
   at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:93)
   at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:81)
   at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2730)
   at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:365)
   at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:346)
   at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:123)
   at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:177)
   at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
   at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:889)
   at org.hibernate.impl.SessionImpl.get(SessionImpl.java:826)
   at org.hibernate.impl.SessionImpl.get(SessionImpl.java:819)
   at org.springframework.orm.hibernate3.HibernateTemplate$1.doInHibernate(HibernateTemplate.java:451)
   at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:365)
   at org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:445)
   at org.springframework.orm.hibernate3.HibernateTemplate.get(HibernateTemplate.java:439)
   at be.fgov.caamihziv.commons.fdmassu.DomainDAO.getMember(DomainDAO.java:24)
   at be.fgov.caamihziv.commons.fdmassu.TestDomainDAO.main(TestDomainDAO.java:32)



In fact I found the bad part of the generated sql : decode(member0_.id, 1) as clazz_0_
Decode is a function with a minimum of 3 value but in the generated code I have only two.
May be I made a mistake in my annotation(it's new for me) but I don't find it.
(Some property of Person and Member are transient because they link other classes but the annotation for them isn't wrote yet)

The next step is : adding extend classes at Member, but not in separated table. I wish persisted this classes in the same table (Member), can I use a discriminator to do that (If it possible, what is the syntax?)

Could someone help me? Thanks in advance


I work with Hibernate 3.1.1.jar and hibernate-annotations-3.1beta8.jar. My oracle server is oracle 10g


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.