Hallo!
Ich bin ein recht neuer Hibernate- User und freue mich, dass das Forum wieder online ist. Ich möchte mittels JAXB die von Hibernate "gefüllten" POJO's in XML schreiben. Ich verwende eine MySQL- Datenbank. Diese Datenbank (Name der DB ist "etl_export_dw") hat eine Tabelle "dw_exp_inventory". Nun habe ich 2 Klassen, welche JPA Annotationen verwenden. Beide Klassen greifen auf Spalten der gleichen Tabelle (dw_exp_inventory) zu.
Klasse "HeaderCartrige"Code:
@Entity
@Table(name="dw_exp_inventory")
public class HeaderCartrige {
@Id
@GeneratedValue
private long recId;
@Embedded
private ComplexTypeHeader header;
public ComplexTypeHeader getHeader() {
return header;
}
public void setHeader(ComplexTypeHeader header) {
this.header = header;
}
public long getRecId() {
return recId;
}
public void setRecId(long recId) {
this.recId = recId;
}
}
Klasse ComplexTypeHeaderCode:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "complexType.Header", propOrder = {
"defaultInstock",
"description"
})
@Embeddable
public class ComplexTypeHeader {
@XmlElement(name = "default-instock")
@Column(name="default_instock")
protected boolean defaultInstock;
@XmlElement
@Column
protected String description;
@XmlAttribute(name = "list-id", required = true)
@Column(name="list_id")
protected String listId;
@XmlAttribute
@Column
protected String mode;
public boolean isDefaultInstock() {
return defaultInstock;
}
public void setDefaultInstock(boolean value) {
this.defaultInstock = value;
}
public String getDescription() {
return description;
}
public void setDescription(String value) {
this.description = value;
}
public String getListId() {
return listId;
}
public void setListId(String value) {
this.listId = value;
}
public String getMode() {
return mode;
}
public void setMode(String value) {
this.mode = value;
}
}
In meiner
hibernate.cfg.xml habe ich das Mapping auf die Entity- Klasse vorgenommen:
Code:
<hibernate-configuration>
...
<session-factory>
<property name="connection.url">jdbc:mysql://localhost/etl_export_dw</property>
...
<mapping class="com.abc.dse.schema.HeaderCartrige" />
</session-factory>
</hibernate-configuration>
verwende ich die *.hbm.xml- Konfiguration anstatt Annotationen funktioniert es wie ich es mir vorstelle. Hier mein *.hbm.xml:
Code:
<hibernate-mapping package="com.abc.dse.pojo.etl.export.dw.inventory">
<class name="HeaderCartrige" table="dw_exp_inventory" mutable="false">
<id name="recId" column="rec_id" type="java.lang.Long">
<generator class="increment" />
</id>
<component name="header">
<property name="listId" column="list_id"/>
<property name="mode" />
<property name="defaultInstock" column="default_instock"/>
<property name="description" />
</component>
</class>
</hibernate-mapping>
Ich versuche nun über Criteria Daten aus der Datenbank zu holen und zwar genau einen Datensatz:
Code:
HeaderCartrige headerCartrige = (HeaderCartrige) getSession().createCriteria(HeaderCartrige.class.getName()).setMaxResults(1).uniqueResult();
headerCartrige ist
null und ich finde keine Lösung bzw. Anhaltspunkt woran es liegen kann. Ich denke ich habe an alles Gedacht. Vielleicht finde ich hier endlich die Lösung durch erfahrenere Hibernate- User...
Ich habe das Ganze mal auf einer Einfacheren Ebene durchgeführt, wieder mit 2 Klassen, wobei ich wieder @Embedded auf die 2. Klasse annotiert habe, die als Feldvariable in der 1. Klasse gehalten wird. Die Daten konnten ermittelt und mein XML geschrieben werden.
Danke und Grüße,
Danny