2013-12-10 1 views
1

Хорошо, скажем, у меня есть таблица заказов и элементов. Вот как описываются элементы в моем классе заказа:Как определить несколько условий для соединения JPA/Ebean

@ManyToMany(cascade=CascadeType.PERSIST) 
@JoinTable(name="MY_ORDER_ITEM_BRIDGE", 
[email protected](name="bridge_order_id",referencedColumnName = "order_order_id"), 
inverseJoinColumns = @JoinColumn(name="bridge_item_id", referencedColumnName="item_item_id")) 
private List<Item> items; 

Это прекрасно работает. Но пусть изображение, которое есть дата в таблице моста, называется MY_ORDER_ITEM_BRIDGE.expiration_date.

Я хочу изменить определение, чтобы включить только элементы с expiration_date, которые еще не произошли.

Поэтому я хочу, сгенерированный SQL, чтобы выглядеть примерно так:

SELECT * 
FROM order o 
join my_order_item_bridge b 
on b.bridge_order_id = o.order_order_id 
join item i 
on i.item_item_id = b.bridge_item_id 
where b.expiration_date < sysdate; 

Я использую Ebean, Play Framework 2.1.3. Спасибо за любую помощь.

UPDATE: В качестве альтернативы, это также может быть второе условие на одном из объединений:

SELECT * 
FROM order o 
join my_order_item_bridge b 
on b.bridge_order_id = o.order_order_id 
and b.expiration_date < sysdate 
join item i 
on i.item_item_id = b.bridge_item_id 

(если это возможно, я хотел бы сделать это в определении класса не в необработанном SQL)

+0

Вам нужно только составить запрос или изменить определение схемы? – cosmolev

+0

Я пытался изменить определение. Но, возможно, мне нужно просто отфильтровать дату, когда я пытаюсь найти записи? В любом случае я пытаюсь избежать SQL в коде, если это возможно. – latj

ответ

2

Проблема заключается в том, что таблица моста, созданная ebean, может иметь два и только два столбца: два внешних ключа.

Если вы хотите иметь другое поле, вы должны моделировать весь набор как три объекта: Order.java, Item.java и OrderItem.java.

Для обеспечения целостности можно использовать ограничение в классе OrderItem:

@Table([email protected](columnNames={"order_order_id", "item_item_id"})) 

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

  • Нет связанных вопросов^_^