SQLException from findObject
----------------------------
Key: OPENJPA-785
URL: https://issues.apache.org/jira/browse/OPENJPA-785
Project: OpenJPA
Issue Type: Bug
Components: jdbc
Affects Versions: 1.2.0, 1.3.0
Environment: Checked with 1.2.0 version, and with
openjpa-1.3.0-SNAPSHOT-r422266:707655
Reporter: Pawel Niezgoda
To reproduce:
PersonEntity (with PersonPK - idClass (name, surname) complex key).
using InheritanceType.JOINED :
ParentEntity extends PersonEntity
ChildEntity extends PersonEntity
ParentEntity -> OneToMany -> ChildEntity.
(having one parent with two children) Execute query:
"select p, c from ParentEntity p, IN(p.children) c"
Excetion occurs:
[java] 1485 hellojpa TRACE [main] openjpa.jdbc.SQL - <t 15351007, conn
4359463> executing prepstmnt 23916456 SELECT t0.name, t0.surname, t2.name,
t2.surname, t2.DTYPE, t2.theThing, t1.PARENT_NAME, t1.PARENT_SURNAME, t1.toy
FROM ParentEntity t0 INNER JOIN ChildEntity t1 ON t0.name = t1.PARENT_NAME AND
t0.surname = t1.PARENT_SURNAME INNER JOIN PersonEntity t3 ON t0.name = t3.name
AND t0.surname = t3.surname LEFT OUTER JOIN PersonEntity t2 ON t1.name =
t2.name AND t1.surname = t2.surname WHERE t3.DTYPE = ? [params=(String)
ParentEntity]
[java] 1485 hellojpa TRACE [main] openjpa.jdbc.SQL - <t 15351007, conn
4359463> [0 ms] spent
[java] Exception in thread "main" <openjpa-1.3.0-SNAPSHOT-r422266:707655
nonfatal general error> org.apache.openjpa.persistence.PersistenceException:
name
[java] at
org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4242)
[java] at
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4207)
[java] at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
[java] at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
[java] at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
[java] at
org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.handleCheckedException(SelectResultObjectProvider.java:155)
[java] at
org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:40)
[java] at
org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1233)
[java] at
org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:995)
[java] at
org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:805)
[java] at
org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:775)
[java] at
org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:771)
[java] at
org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:517)
[java] at
org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:257)
[java] at
org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:428)
[java] at hellojpa.Main.main(Main.java:86)
[java] Caused by: java.sql.SQLException: name
[java] at
org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.findObject(SelectImpl.java:2510)
[java] at
org.apache.openjpa.jdbc.sql.ResultSetResult.translate(ResultSetResult.java:492)
[java] at
org.apache.openjpa.jdbc.sql.AbstractResult.getString(AbstractResult.java:764)
[java] at
org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy.getPrimaryKeyValue(StringFieldStrategy.java:212)
[java] at
org.apache.openjpa.jdbc.meta.ClassMapping.getObjectId(ClassMapping.java:189)
[java] at
org.apache.openjpa.jdbc.meta.ClassMapping.getObjectId(ClassMapping.java:149)
[java] at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:966)
[java] at
org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:278)
[java] at
org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2397)
[java] at
org.apache.openjpa.jdbc.kernel.exps.PCPath.load(PCPath.java:696)
[java] at
org.apache.openjpa.jdbc.kernel.exps.PCPath.load(PCPath.java:684)
[java] at
org.apache.openjpa.jdbc.kernel.ProjectionResultObjectProvider.getResultObject(ProjectionResultObjectProvider.java:78)
[java] at
org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36)
[java] ... 9 more
When using "SingleTable" inheritance, everything works ok.
-----
public class PersonPK implements Serializable{
String name;
String surname;
@Override
public boolean equals(Object arg0) {
return name.equals(name) && surname.equals(surname);
}
@Override
public int hashCode() {
return name.hashCode() * surname.hashCode();
}
}
--------
@Entity
@IdClass (value=PersonPK.class)
public class PersonEntity {
@Id
String name;
@Id
String surname;
String theThing;
public String getTheThing() {
return theThing;
}
public void setTheThing(String theThing) {
this.theThing = theThing;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}
---------
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class ChildEntity extends PersonEntity {
String toy;
@ManyToOne
ParentEntity parent = null;
public String getToy() {
return toy;
}
public void setToy(String toy) {
this.toy = toy;
}
public ParentEntity getParent() {
return parent;
}
public void setParent(ParentEntity parent) {
this.parent = parent;
}
@Override
public String toString() {
return "Child->"+name+", "+surname+", "+toy;
}
}
---------
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class ParentEntity extends PersonEntity {
String job = null;
@OneToMany(mappedBy="parent", fetch=FetchType.LAZY,
cascade=CascadeType.ALL)
Collection<ChildEntity> children = new ArrayList<ChildEntity>();
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Collection<ChildEntity> getChildren() {
return children;
}
public void setChildren(ArrayList<ChildEntity> children) {
this.children = children;
}
public void addChild(ChildEntity child) {
this.children.add(child);
}
@Override
public String toString() {
return "Parent->"+name+", "+surname+", "+job;
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.