У меня есть две сущности, к которым я хочу присоединиться через общую строку.
Я создал представление, которое хочу использовать в качестве таблицы соединения. Это все работает нормально, за исключением случаев, когда я пытаюсь удалить объект. Затем Hibernate пытается удалить из этого представления, что, конечно, не удается. Используемая база данных - MySQL.
Итак, у меня есть
@Entity
public class Event {
...
String productId;
Date eventDatetime;
...
}
@Entity
public class Stock {
...
String productId;
...
}
Я создал представление в MySQL
DROP VIEW IF EXISTS EVENT_STOCK_VIEW;
create view EVENT_STOCK_VIEW AS
SELECT EVENT.EVENT_ID, STOCK.STOCK_ID
FROM EVENT, STOCK
where STOCK.PRODUCT_ID = EVENT.PRODUCT_ID;
в Событии, которое я добавил:
@ManyToOne(fetch=FetchType.LAZY)
@JoinTable(name="EVENT_STOCK_VIEW",
joinColumns=@JoinColumn(name="EVENT_ID"),
inverseJoinColumns=@JoinColumn(name="STOCK_ID",updatable=false,insertable=false))
public Stock getStock(){
return this.stock;
}
и на складе:
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name="EVENT_STOCK_VIEW",
joinColumns=@JoinColumn(name="STOCK_ID",updatable=false,insertable=false), inverseJoinColumns=@JoinColumn(name="EVENT_ID",updatable=false,insertable=false))
@OrderBy("eventDatetime DESC")
public List<Event> getEvents(){
return events;
}
Я немного погуглил и нашел этот сайт .
Но решение на самом деле не очень хорошее (вы должны использовать сущность между акцией и событием).
Есть ли другие решения?
Я мог бы использовать Hibernate Interceptor и переопределить onPrepareStatement (String sql) и проверить, содержит ли строка SQL delete из EVENT_STOCK_VIEW и вернуть пустую команду. Ясно, что хак, который я стараюсь избегать.