Hi, ich habe hier einen Fall mit Objekten, die zu mehreren anderen
eine one-to-many Beziehung eingehen.
Beispiel:
Eine Order hat mehrere Payments und mehrere Credits,
wobei jedes Credit und jedes Payment genau einem Batch zugeordnet werden (der Batch aber mehrere Credits und
Payments hat).
Allerdings kann es vorkommen, daß zwei Credits, die einer Order zugeordnet sind unterschiedlichen Batches zugeordnet werden.
Die Beziehung habe zuerst versucht in der Order und im Batch
als one-to-many innerhalb eines sets zu modellieren (jetzt auskommentiert) und in den Credits und Payments als many-to-one
auf die Order und Batch. Das würde ja Sinn ergeben weil ich die
Referenzen ja nur in den Credits und Payments habe: ein Credit
bzw. ein Payment ist immer genau einer Order und einem Batch
zugeordnet.
Das führt aber in Hibernate zu einer "duplicate property ... backref"
Exception. Darum habe ich die one-to-many on Order und Batch
auf many-to-many ausgebessert. Das funktioniert, ich habe dann aber
4 eigentlich unnötige Tabellen um die Order-Crdedit, Order-Payment,
Batch-Credit und Batch-Payment abzubilden.
Die Frage ist jetzt: geht das in Hibernate nicht anders oder habe ich
bei der Abbildung etwas vermurkst?
Bin auf jeden Fall für jeden Hinweis dankbar,
Chris
---------
<class name="Order" table="pmt_order">
<id name="id" column="id">
<generator class="native"/>
</id>
<set name="payments" table="pmt_order_payments" cascade="delete">
<key column="order_id" not-null="true"/>
<!--
<one-to-many class="at.one.tibco.connector.qtill.model.Payment"/>
-->
<many-to-many column="payment_id" class="at.one.tibco.connector.qtill.model.Payment"/>
</set>
<set name="credits" table="pmt_order_credits" cascade="delete">
<key column="order_id" not-null="true"/>
<!--
<one-to-many class="at.one.tibco.connector.qtill.model.Credit"/>
-->
<many-to-many column="credit_id" class="at.one.tibco.connector.qtill.model.Credit"/>
</set>
<property name="created"/>
<property name="modified"/>
</class>
<class name="Batch" table="pmt_batch">
<id name="id" column="id">
<generator class="native"/>
</id>
<set name="payments" table="pmt_batch_payments" cascade="delete">
<key column="batch_id" not-null="true"/>
<!--
<one-to-many class="at.one.tibco.connector.qtill.model.Payment"/>
-->
<many-to-many column="payment_id" class="at.one.tibco.connector.qtill.model.Payment"/>
</set>
<set name="credits" table="pmt_batch_credits" cascade="delete">
<key column="batch_id" not-null="true"/>
<!--
<one-to-many class="at.one.tibco.connector.qtill.model.Credit"/>
-->
<many-to-many column="credit_id" class="at.one.tibco.connector.qtill.model.Credit"/>
</set>
</class>
<class name="Credit" table="pmt_credit">
<id name="id" column="id">
<generator class="native"/>
</id>
<many-to-one
name="order"
class="at.one.tibco.connector.qtill.model.Order"
column="order_id"
not-null="true"
insert="false"
update="false"/>
<many-to-one
name="batch"
class="at.one.tibco.connector.qtill.model.Batch"
column="batch_id"
not-null="false"
insert="false"
update="false"/>
<property name="creditNumber" unique="true"/>
<property name="creditState"/>
<component name="Amount" class="at.one.tibco.connector.qtill.model.Amount">
<property name="currency" column="amount_currency"/>
<property name="value" column="amount_value"/>
</component>
<property name="created"/>
<property name="modified"/>
</class>
[/i]
|