나는 공통 String을 통해 결합하고자하는 두 개의 엔티티가있다. 조인 테이블로 사용하려는 뷰를 만들었습니다. 이 엔티티를 삭제하려고 할 때를 제외하고는 모두 잘 작동합니다. Hibernate는 그 뷰에서 삭제하려고 시도한다. 사용 된 데이터베이스는 MySQL입니다.Hibernate에서 뷰를 조인 테이블로 사용
@ManyToOne(fetch=FetchType.LAZY)
@JoinTable(name="EVENT_STOCK_VIEW",
[email protected](name="EVENT_ID"),
[email protected](name="STOCK_ID",updatable=false,insertable=false))
public Stock getStock(){
return this.stock;
}
및 재고를 :
는 그래서 내가 추가 한 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;
에서보기를 만든
@Entity
public class Event {
...
String productId;
Date eventDatetime;
...
}
@Entity
public class Stock {
...
String productId;
...
}
있어
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name="EVENT_STOCK_VIEW",
[email protected](name="STOCK_ID",updatable=false,insertable=false), [email protected](name="EVENT_ID",updatable=false,insertable=false))
@OrderBy("eventDatetime DESC")
public List<Event> getEvents(){
return events;
}
나는 조금 봤는데이 site을 발견했습니다. 하지만 해결책은 정말 좋지 않습니다. 주식과 이벤트 사이에서 엔티티를 사용해야합니다.
다른 해결책이 있습니까?
하이버 네이트 인터셉터를 사용하고 onPrepareStatement (String sql)을 덮어 쓰고 SQL 문자열에 EVENT_STOCK_VIEW의 삭제가 포함되어 있는지 확인하고 더미 명령을 반환 할 수 있습니다. 분명히 피하려고하는 해킹입니다.
위의 예제처럼 쉽습니다. 불행히도 내가 만들고있는 뷰에는 where 절에 몇 가지 제한이 있습니다. 그러면 솔루션이 더 이상 작동하지 않습니다. – Ben