Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version: 3.0.5
Mapping documents:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.business.sem" default-cascade="save-update" default-lazy="true">
<class name="VendorAccount" lazy="true" select-before-update="false" table="VendorAccount">
<meta attribute="implements">com.business.sem.IEntityState</meta>
<meta attribute="implements">com.business.sem.ISecurity</meta>
<id name="id" type="java.lang.Long" column="id">
<meta attribute="use-in-tostring">true</meta>
<generator class="identity" />
</id>
<property name="name" column="name" length="50" type="java.lang.String" not-null="true">
<meta attribute="use-in-tostring">true</meta>
<meta attribute="field-description">Name of the account</meta>
</property>
<one-to-one name="settings" class="VendorAccountSettings"
cascade="save-update"
constrained="false"
outer-join="true"
lazy="false"
fetch="join" />
<map name="biddingSchedule" outer-join="true" fetch="select" table="BiddingSchedule" lazy="true">
<key column="accountId" not-null="true" unique="false" />
<map-key-many-to-many class="com.business.sem.DistributionType" column="distributionType" />
<one-to-many class="BiddingSchedule" />
</map>
<map name="biddingExceptions" inverse="true" outer-join="true" fetch="select" order-by="exceptionDate desc" table="BiddingException" lazy="true">
<key column="accountId" not-null="true" unique="false" />
<map-key-many-to-many class="com.business.sem.DistributionType" column="distributionType" />
<one-to-many class="BiddingException" />
</map>
<many-to-one name="type" class="AccountType" column="accountType" fetch="select" cascade="none" not-null="true">
<meta attribute="field-description">Type of this VendorAccount</meta>
</many-to-one>
<property name="lastUpdate" column="lastUpdate" type="java.sql.Timestamp" not-null="false" update="false" insert="false" />
<many-to-one name="status" class="Status" column="status" fetch="select" cascade="none" not-null="true">
<meta attribute="field-description">Status of this VendorAccount</meta>
</many-to-one>
</class>
</hibernate-mapping>
Name and version of the database you are using:
SQLServer 2000
BiddingException table is (pseudo-sql):
id INT PRIMARY KEY
accountId BIGINT FOREIGN KEY FOR VendorAccount.id
distributionType CHAR(1) FOREIGN KEY FOR DistributionType.code
exceptionDate DATETIME;
As you can see, VendorAccount can have multiple BiddingExceptions (1:M).
How can I map this relationship? I would like to be able to use it like this:
Code:
Set<java.sql.Date> dateSet = vendorAccount.getBiddingSchedule().get (SEARCH_MARKETING_TYPE)
The <map> definition in bold above maps just single date per each value of <map-key-many-to-many> and the spec doesn't allow to specify a <set> inside the <map> definition.
Is there a better way to map it? I think I could do it using subclasses: then I could use map key as a discriminator and get all ContentBiddingExceptions and SearchMarketingBiddingExceptions, but I'd prefer to just have a map keyed by DistributionType and containing Lists of dates, or list of BiddingExceptions.