-->
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.  [ 3 posts ] 
Author Message
 Post subject: 1 to 1 mapping gets invalid column name
PostPosted: Thu Apr 11, 2013 5:37 pm 
Newbie

Joined: Fri Apr 05, 2013 3:28 pm
Posts: 9
I am defining a 1 to 1 mapping using annotation. I am getting an 'Invalid column name 'bestPractices_id' error and am unable to see why.
Code:
package com.nimsoft.ca.search;
import java.sql.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;


import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Store;

/**
* The persistent class for the contact database table.
*
*/
@Entity
@Indexed
@Table(name = "KnowledgeArticle")
public class KnowledgeArticles {
    private String id;
    private String articlenumber;
    private String caseassociationcount;
    private String createdbyid;
    private Date createddate;
    private Date firstpublisheddate;
    private Date lastmodifieddate;
    private Date lastpublisheddate; 
    private BestPractices bestpractices;

    public KnowledgeArticles() {

    }

    public KnowledgeArticles(String id, String articlenumber, String caseassociationcount, String createdbyid, Date createddate,Date firstpublisheddate, Date lastmodifieddate, Date lastpublisheddate, BestPractices bestPractices) {
        this.id = id;
        this.articlenumber = articlenumber;
        this.caseassociationcount = caseassociationcount;
        this.createdbyid = createdbyid;
        this.createddate = createddate;
        this.firstpublisheddate = firstpublisheddate;
        this.lastmodifieddate = lastmodifieddate;
        this.lastpublisheddate = lastpublisheddate;
        this.bestpractices = bestPractices;


    }
       
    @Id
    public String getId() {
        return this.id;
    }

    public void setId(String id) {
        this.id = id;
    }
   
   @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO) 
    public String getArticleNumber() {
        return this.articlenumber;
    }

    public void setArticleNumber(String articlenumber) {
        this.articlenumber = articlenumber;
    }

    public Date getFirstPublishedDate() {
        return firstpublisheddate;
    }

    public void setFirstPublishedDate(Date firstpublisheddate) {
        this.firstpublisheddate = firstpublisheddate;
    }
   
    public Date getLastModifiedDate() {
        return lastmodifieddate;
    }

    public void setLastModifiedDate(Date lastmodifieddate) {
        this.lastmodifieddate = lastmodifieddate;
    }

    public Date getLastPublishedDate() {
        return lastpublisheddate;
    }

    public void setLastPublishedDate(Date lastpublisheddate) {
        this.lastpublisheddate = lastpublisheddate;
    }
    @OneToOne   
    public BestPractices getBestPractices() {
          bestpractices.setKnowledgeArticleId(getId());
          return bestpractices;
          }
        
    public void setBestPractices(BestPractices bestpractices) {
          this.bestpractices = bestpractices;
    }
}




Code:

package com.nimsoft.ca.search;
import java.sql.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Store;

/**
* The persistent class for the contact database table.
*
*/
@Entity
@Indexed
@Table(name = "best_practices__kav")
public class BestPractices {
    private String id;
    private String articletype;
    private Date firstpublisheddate;
    private Date lastpublisheddate;
    private Date lastmodifieddate;
    private String articlenumber;
    private String title;
    private String summary;
    private String best_practices__c;
    private String publishstatus;
    private String originating_case__c;
    private String knowledgearticleid;
   

    public BestPractices() {

    }

    public BestPractices(String id, String articletype, Date firstpublisheddate, Date lastpublisheddate, Date lastmodifieddate, String articlenumber, String title, String summary, String best_practices__c, String publishstatus, String originating_case__c, String knowledgearticleid) {
        this.id = id;
        this.articletype = articletype;
        this.firstpublisheddate = firstpublisheddate;
        this.lastpublisheddate = lastpublisheddate;
        this.lastmodifieddate = lastmodifieddate;
        this.articlenumber = articlenumber;
        this.title = title;
        this.summary = summary;
        this.best_practices__c = best_practices__c;
        this.publishstatus = publishstatus;
        this.originating_case__c = originating_case__c;
        this.knowledgearticleid = knowledgearticleid;
    }
       
    @Id
    public String getId() {
        return this.id;
    }

    public void setId(String id) {
        this.id = id;
    }
   
    public String getKnowledgeArticleId() {
       return knowledgearticleid;
    }
   
    public void setKnowledgeArticleId(String knowledgearticleid) {
          this.knowledgearticleid = knowledgearticleid;
          }
   
   @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO)   
    public String getArticleType() {
        return this.articletype;
    }

    public void setArticleType(String articletype) {
        this.articletype = articletype;
    }
   
   @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO) 
    public String getArticleNumber() {
        return this.articlenumber;
    }

    public void setArticleNumber(String articlenumber) {
        this.articlenumber = articlenumber;
    }



    public Date getFirstPublishedDate() {
        return firstpublisheddate;
    }

    public void setFirstPublishedDate(Date firstpublisheddate) {
        this.firstpublisheddate = firstpublisheddate;
    }


    public Date getLastPublishedDate() {
        return lastpublisheddate;
    }

    public void setLastPublishedDate(Date lastpublisheddate) {
        this.lastpublisheddate = lastpublisheddate;
    }

    public Date getLastModifiedDate() {
        return lastmodifieddate;
    }

    public void setLastModifiedDate(Date lastmodifieddate) {
        this.lastmodifieddate = lastmodifieddate;
    }
   
   @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO) 
    public String getTitle() {
        return this.title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
   
   @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO) 
    public String getSummary() {
        return this.summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }
   
   @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO) 
    public String getBest_Practices__c() {
        return this.best_practices__c;
    }

    public void setBest_Practices__c(String best_practices__c) {
        this.best_practices__c = best_practices__c;
    }
   
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO)   
    public String getPublishStatus() {
        return this.publishstatus;
    }

    public void setPublishStatus(String publishstatus) {
        this.publishstatus = publishstatus;
    }

   @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO)   
    public String getOriginating_Case__c() {
        return this.originating_case__c;
    }

    public void setOriginating_Case__c(String originating_case__c) {
        this.originating_case__c = originating_case__c;
    }
   
   
   

   
   
}



Code:

package com.nimsoft.ca.search;

import java.sql.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class TestOneToOne {     
   @SuppressWarnings("unchecked")   
   public static void main(String[] args) {         
      System.out.println("Hibernate One-To-One example (Annotation)");                         
      Session session = HibernateUtil.getSession();
List<KnowledgeArticles> knowledgearticles = session.createQuery("from KnowledgeArticles").list();     
for (KnowledgeArticles knowledgearticle : knowledgearticles) {           
   System.out.println(knowledgearticle.getArticleNumber() + " , " +
    knowledgearticle.getFirstPublishedDate() +
    knowledgearticle.getBestPractices().getOriginating_Case__c() +
    knowledgearticle.getBestPractices().getArticleType());
     
      }       
session.getTransaction().commit();        session.close();     }}



Code:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
        <session-factory>       
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="connection.url">jdbc:sqlserver://138.42.135.63;databaseName=Salesforce Backups;</property>
        <property name="connection.username">sa</property>
        <property name="connection.password">passworrd</property>           
        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>             
        <property name="show_sql">false</property>   
        <property name="format_sql">false</property>

        <property name="hibernate.search.default.directory_provider">filesystem</property>
        <property name="hibernate.search.default.indexBase">C:\lucene\indexes</property>
        <mapping class="com.nimsoft.ca.search.KnowledgeArticles"/>
        <mapping class="com.nimsoft.ca.search.BestPractices"/>
      <mapping class="com.nimsoft.ca.search.CaseSummaries"/>
    </session-factory>
</hibernate-configuration>



Code:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.nimsoft.ca.search</groupId>
  <artifactId>HibernateSearch</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>HibernateSearch</name>
  <url>http://maven.apache.org</url>
     
  <dependencies>
<!-- hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.2.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search</artifactId>
            <version>4.2.0.Final</version>
        </dependency>

        <!-- SQLite JDBC library -->
      <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>sqljdbc4</artifactId>
        <version>4.0</version>
       
      </dependency>
      
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
       </dependency>
  </dependencies>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>


Top
 Profile  
 
 Post subject: Re: 1 to 1 mapping gets invalid column name
PostPosted: Thu Apr 11, 2013 8:47 pm 
Newbie

Joined: Fri Apr 05, 2013 3:28 pm
Posts: 9
Some background:
I have a parent table, KnowledgeArticle, with Id as the primary key, and I have several child tables, each a different type of article. So I want to be able to set them up for querying and searching, so that I can do a search of the KnowledgeArticle and return articles of all types. The secondary tables have foreign keys in them, that relate back to the primary table. The name of the secondary table foreign keys, in all cases, is KnowledgeArticleId

So there will be, in addition to BestPractices, several more article types.

Can you suggest where I have gone wrong?


Top
 Profile  
 
 Post subject: Re: 1 to 1 mapping gets invalid column name
PostPosted: Fri Apr 12, 2013 2:11 pm 
Newbie

Joined: Fri Apr 05, 2013 3:28 pm
Posts: 9
Hmm. I went back and followed another tutorial and got it to work, but with primary keys 1 to 1 relationship. It worked. So I tried to pattern my classes after those in the tutorial and I get the same result. I have simplified the objects so here they are again...
Code:
package com.nimsoft.ca.search;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "KNOWLEDGEARTICLE")

public class KnowledgeArticles {
   
   private String id;
    private String articleNumber;
    private String caseAssociationCount;
   private CaseSummaries caseSummary;
   
    public KnowledgeArticles() {
    }

    public KnowledgeArticles(String articlenumber, String caseassociationcount, CaseSummaries casesummary) {
        this.articleNumber = articlenumber;
        this.caseAssociationCount = caseassociationcount;
      this.caseSummary = casesummary;
    }
   
   @Id
   @GeneratedValue
   @Column(name = "ID")
    public String getId() {
        return this.id;
    }

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

    public String getArticleNumber() {
        return this.articleNumber;
    }

    public void setArticleNumber(String articlenumber) {
        this.articleNumber = articlenumber;
    }
   
    public String getCaseAssociationCount() {
        return this.caseAssociationCount;
    }

    public void setcaseAssociationCount(String caseassociationcount) {
        this.caseAssociationCount = caseassociationcount;
    }


@OneToOne(cascade = CascadeType.ALL)
public CaseSummaries getCaseSummary() {
return this.caseSummary;
}

public void setCaseSummary(CaseSummaries casesummary) {
this.caseSummary = casesummary;
}
/////////////////////////////////////////////////////////////////////////////
        
}

Code:
package com.nimsoft.ca.search;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.Table;

@Entity
@Table(name = "CASE_SUMMARIES__KAV")
public class CaseSummaries {

    private String knowledgeArticleId;
    private String articleType;
    private String articleNumber;
     
    public CaseSummaries() {
    }

    public CaseSummaries(String articletype, String articlenumber) {

        this.articleType = articletype;
        this.articleNumber = articlenumber;
    }
       
   @Id
   @GeneratedValue
   @Column(name = "KNOWLEDGEARTICLEID")
    public String getKnowledgeArticleId(){
        return this.knowledgeArticleId;
    }

    public void setKnowledgeArticleId(String knowledgearticleid){
        this.knowledgeArticleId = knowledgearticleid;
    }
   
   @Column(name = "ARTICLETYPE", nullable = false, length=40)
    public String getArticleType() {
        return this.articleType;
    }

    public void setArticleType(String articletype) {
        this.articleType = articletype;
    }
   
   @Column(name = "ARTICLENUMBER", nullable = false, length=30)
    public String getArticleNumber() {
        return this.articleNumber;
    }

    public void setArticleNumber(String articlenumber) {
        this.articleNumber = articlenumber;
    }

}


My main class to test . . .

Code:

package com.nimsoft.ca.search;


import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;


import com.nimsoft.ca.search.HibernateUtil;

public class Main {

   public static void main(String[] args) {
      Session session = HibernateUtil.getSession();
      Transaction transaction = null;
      try {

         
         List<KnowledgeArticles> knowledgeArticles = session.createQuery("from KnowledgeArticles").list();
           for (KnowledgeArticles knowledgeArticle : knowledgeArticles) {
               System.out.println(knowledgeArticle.getArticleNumber());
           }
         
         
      } catch (HibernateException e) {

         e.printStackTrace();
      } finally {
         session.close();
      }

   }

}



And the output.

Code:

11:31:22,437  INFO Version:37 - HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
11:31:22,484  INFO Version:41 - HHH000412: Hibernate Core {4.2.0.Final}
11:31:22,578  INFO Environment:239 - HHH000206: hibernate.properties not found
11:31:22,593  INFO Environment:342 - HHH000021: Bytecode provider name : javassist
11:31:22,671  INFO Configuration:1933 - HHH000043: Configuring from resource: /hibernate.cfg.xml
11:31:22,671  INFO Configuration:1952 - HHH000040: Configuration resource: /hibernate.cfg.xml
11:31:22,906  INFO Configuration:2074 - HHH000041: Configured SessionFactory: null
11:31:23,640  INFO DriverManagerConnectionProviderImpl:98 - HHH000402: Using Hibernate built-in connection pool (not for production use!)
11:31:23,907  INFO DriverManagerConnectionProviderImpl:134 - HHH000115: Hibernate connection pool size: 20
11:31:23,907  INFO DriverManagerConnectionProviderImpl:137 - HHH000006: Autocommit mode: false
11:31:23,907  INFO DriverManagerConnectionProviderImpl:151 - HHH000401: using driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] at URL [jdbc:sqlserver://138.42.135.63;databaseName=Salesforce Backups;]
11:31:23,907  INFO DriverManagerConnectionProviderImpl:156 - HHH000046: Connection properties: {user=sa, password=****}
11:31:24,782  INFO Dialect:128 - HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect
11:31:24,845  INFO TransactionFactoryInitiator:68 - HHH000399: Using default transaction strategy (direct JDBC transactions)
11:31:24,861  INFO ASTQueryTranslatorFactory:48 - HHH000397: Using ASTQueryTranslatorFactory
11:31:25,001  INFO Version:39 - HSEARCH000034: Hibernate Search 4.2.0.Final
11:31:25,173  WARN ConfigContext:301 - HSEARCH000075: Configuration setting hibernate.search.lucene_version was not specified, using LUCENE_CURRENT.
11:31:25,923 DEBUG SQL:104 -
    select
        knowledgea0_.ID as ID1_1_,
        knowledgea0_.articleNumber as articleN2_1_,
        knowledgea0_.caseAssociationCount as caseAsso3_1_,
        knowledgea0_.caseSummary_KNOWLEDGEARTICLEID as caseSumm4_1_
    from
        KNOWLEDGEARTICLE knowledgea0_
Hibernate:
    select
        knowledgea0_.ID as ID1_1_,
        knowledgea0_.articleNumber as articleN2_1_,
        knowledgea0_.caseAssociationCount as caseAsso3_1_,
        knowledgea0_.caseSummary_KNOWLEDGEARTICLEID as caseSumm4_1_
    from
        KNOWLEDGEARTICLE knowledgea0_
11:31:25,956  WARN SqlExceptionHelper:143 - SQL Error: 207, SQLState: S0001
11:31:25,956 ERROR SqlExceptionHelper:144 - Invalid column name 'caseSummary_KNOWLEDGEARTICLEID'.
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
   at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122)
   at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
   at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
   at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
   at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61)
   at org.hibernate.loader.Loader.getResultSet(Loader.java:2031)
   at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1832)
   at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
   at org.hibernate.loader.Loader.doQuery(Loader.java:899)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
   at org.hibernate.loader.Loader.doList(Loader.java:2516)
   at org.hibernate.loader.Loader.doList(Loader.java:2502)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332)
   at org.hibernate.loader.Loader.list(Loader.java:2327)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490)
   at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
   at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
   at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1268)
   at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
   at com.nimsoft.ca.search.Main.main(Main.java:21)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'caseSummary_KNOWLEDGEARTICLEID'.
   at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
   at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
   at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:390)
   at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
   at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
   at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
   at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
   at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
   at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283)
   at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56)
   ... 15 more



I wonder if I have to have a different annotation due to the fact that my relationship is based on a foreign key.

KnowledgeArticle table has :

ID
articlenumber
caseassociationcount

and

CaseSummary table has
ID
articletype
KnowledgeArticleId.

KnowledgeArticleId is a foreign key that relates CaseSummary rows back to the KnowledgeArticle table via the knowledgearticle id field.


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

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.