Hello,
We use pojos with relations to interface-types. With annotations of attributes
as shown below (field: SelektionAnfrageDefinition definition), I get this error:
<openjpa-1.0.2-r420667:627158 fatal user error>
org.apache.openjpa.persistence.ArgumentException:
"de.huk.selektionen.jpa.test.SelektionImpl.definition" has columns with
targets, but OpenJPA does not support any joins on this mapping in this context.
public interface Selektion extends Serializable{
public String getName();
public void setName(String newName);
public java.util.Date getErstelldatum();
public void setErstelldatum(java.util.Date newErstelldatum);
public de.huk.vtp.selektionen.bo.SelektionAnfrageDefinition
getDefinition();
public void
setDefinition(de.huk.vtp.selektionen.bo.SelektionAnfrageDefinition
newDefinition);
}
@Entity
@Table(name="TASELEKTION")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class SelektionImpl implements Selektion, Serializable {
@Column(name="NAME", length=50)
@Id private String name;
@Column(name="ERSTELLDATUM", length=50)
private Date erstelldatum;
@OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.PERSIST},
optional=true)
@JoinColumn(name="DEFINITION", referencedColumnName="DEF_ID")
protected SelektionAnfrageDefinition definition;
//getters/setters
}
public interface SelektionAnfrageDefinition extends Serializable {
public String getDefinitionId();
public void setDefinitionId(String definitionId);
}
@Entity
@Table(name="TADEFINITION")
public class SelektionAnfrageDefinitionImpl implements
SelektionAnfrageDefinition, Serializable {
@Id
@Column(name="DEF_ID", length=50)
protected String definitionId;
}
I put annotation of @OneToOne Join along with the getter in the Interface
definition (again see below). This worked, but when trying to flush complex
entities, I receive error due to cascading.
<openjpa-1.0.2-r420667:627158 fatal user error>
org.apache.openjpa.persistence.InvalidStateException:
Encountered unmanaged object "[EMAIL PROTECTED]" in persistent field
"de.huk.selektionen.jpa.test.SelektionImpl.definition" of managed object
"[EMAIL PROTECTED]" during flush. However, this field does not allow to be
CascadeType.PERSIST. You cannot flush unmanaged objects.
FailedObject: [EMAIL PROTECTED]
public interface Selektion extends Serializable{
public String getName();
public void setName(String newName);
public java.util.Date getErstelldatum();
public void setErstelldatum(java.util.Date newErstelldatum);
@OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.PERSIST},
optional=true)
@JoinColumn(name="DEFINITION", referencedColumnName="DEF_ID")
public de.huk.vtp.selektionen.bo.SelektionAnfrageDefinition
getDefinition();
public void
setDefinition(de.huk.vtp.selektionen.bo.SelektionAnfrageDefinition
newDefinition);
}
@Entity
@Table(name="TASELEKTION")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class SelektionImpl implements Selektion, Serializable {
@Column(name="NAME", length=50)
@Id private String name;
@Column(name="ERSTELLDATUM", length=50)
private Date erstelldatum;
protected SelektionAnfrageDefinition definition;
//getters/setters
}
public interface SelektionAnfrageDefinition extends Serializable {
public String getDefinitionId();
public void setDefinitionId(String definitionId);
}
@Entity
@Table(name="TADEFINITION")
public class SelektionAnfrageDefinitionImpl implements
SelektionAnfrageDefinition, Serializable {
@Id
@Column(name="DEF_ID", length=50)
protected String definitionId;
}
Here is the piece of test code
SelektionAnfrageDefinition definition001 = new SelektionAnfrageDefinitionImpl();
definition001.setDefinitionId("001");
SelektionAnfrage aktuelleAnfrage001 = new SelektionAnfrageImpl();
aktuelleAnfrage001.setId("1");
aktuelleAnfrage001.setName("Selektion Partner (ID 1)");
aktuelleAnfrage001.setStatus("abgeschlossen");
aktuelleAnfrage001.setErstelldatum(date);
aktuelleAnfrage001.setAbrufzeit("noch 8 Tage");
aktuelleAnfrage001.setDefinition(definition001);
this.getEm().persist(aktuelleAnfrage001);
this.getEm().flush();
And here my persistence.xml
persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="Selektionen_DB">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>java:comp/env/jdbc/selektionendb</jta-data-source>
<class>de.huk.vtp.selektionen.bo.SelektionImpl</class>
<class>de.huk.vtp.selektionen.bo.SelektionAnfrageDefinitionImpl</class>
<properties>
<property name="openjpa.TransactionMode"
value="managed"/>
<property name="openjpa.ConnectionFactoryMode"
value="managed"/>
<property name="openjpa.jdbc.DBDictionary" value="db2"/>
<property name="openjpa.jdbc.Schema" value="T7"/>
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema"/>
</properties>
</persistence-unit>
</persistence>
Thanks for your help
Annette Scherer
Abteilung Informatik
HUK-COBURG
Bahnhofsplatz
96444 Coburg
Telefon 09561 96-1718
Telefax 09561 96-3671
E-Mail [EMAIL PROTECTED]
Internet www.HUK.de
=============================================================
HUK-COBURG Haftpflicht-Unterstützungs-Kasse kraftfahrender Beamter Deutschlands
a. G. in Coburg
Reg.-Gericht Coburg HRB 100; St.-Nr. 9212/101/00021
Sitz der Gesellschaft: Bahnhofsplatz, 96444 Coburg
Vorsitzender des Aufsichtsrats: Werner Strohmayr.
Vorstand: Rolf-Peter Hoenen (Sprecher), Wolfgang Flaßhoff, Stefan Gronbach,
Klaus-Jürgen Heitmann, Dr. Christian Hofer, Dr. Wolfgang Weiler.
=============================================================