2012-06-19 4 views
0

У меня есть следующие DB схема:Как сделать следующее отображение гибернации?

table a { 
    id, 
    state 
} 

table b { 
    id, 
    a_id, 
    is_valid, 
    amount 
} 

Я хочу иметь отображение спящего режима, где я выборку значений из таблицы б только если a.state имеет определенное значение. Это отображение зимуют я имел (использовал пример из jBoss Documentation)

<discriminator column="state" type="string"/> 
<subclass name="ClassB" discriminator-value="VALUE1"> 
    <join table="b"> 
     <key column="a_id"/> 
     <property name="amount" column="amount"/> 
    </join> 
</subclass> 

Когда я сделал это, мой XML показал синтаксическую ошибку о том, что иерархия должна следовать.

Это то, что я делаю правильно, а если нет, было бы здорово, если бы кто-то мог показать мне путь вперед. Благодарю.

P.S - более одной записи в таблице b будет иметь столбец a_id. Однако только одна строка в b будет иметь значение is_valid и его достаточно, если я получу эту строку в моем POJO

+0

это поможет, если вы выложили полную карту и объекты Java за ним. – Matt

ответ

1

Мне кажется, что вы сопоставляете таблицу на подкласс с дискриминационной стратегией. Это будет означать корреляцию между 1 и 1 строками между таблицей a и таблицей b, где первичный ключ таблицы b (подкласс) также будет внешним ключом в таблице a.

Однако ваше отображение немного странно, что у вас есть

<key column="a_id" /> 

Как правило, это должно быть

<key column="id" /> 

И не будет столбец "a_id".

Однако ваш дизайн db выглядит как отношения «один ко многим», а не отношение подкласса.

Без ваших объектов, я не могу сказать, что именно вы пытаетесь сделать.

Взгляните на документы hibernate о наследовании.

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/inheritance.html

+0

Да, это отношения друг к другу. Многие строки в таблице b будут иметь один и тот же ключ a_id. не хотел использовать сопоставление «один-ко-многим», поскольку получение объекта ClassA будет извлекать все объекты ClassB из db, и я не хотел этого делать. если вы все еще хотите, я могу разместить объекты java. –

+0

вы можете разместить их, но они элемент не очень полезен для того, что вы пытаетесь сделать. Вы пытаетесь получить только коллекцию, если конкретный столбец установлен в определенное значение. На самом деле это не то, что я могу сдержать с гибернацией. – Matt

+0

То, что я сделал, было помещено в другое сопоставление спящего режима, поскольку я занимался слишком многими вещами в одном спящем отображении –

Смежные вопросы