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.