Хорошо, скажем, у меня есть таблица заказов и элементов. Вот как описываются элементы в моем классе заказа:Как определить несколько условий для соединения 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)
Вам нужно только составить запрос или изменить определение схемы? – cosmolev
Я пытался изменить определение. Но, возможно, мне нужно просто отфильтровать дату, когда я пытаюсь найти записи? В любом случае я пытаюсь избежать SQL в коде, если это возможно. – latj