아놔….
Play framework 를 사용하여 웹어플리케이션을 만들고 있는데
일단 Play framework 는 h2 database engine 이 embedded 되어 있어서 편리하게 사용할수 있고 해당 db 는
ebean 을 사용하여 orm 을 사용할수 있다.
난 사실 orm 보다 sqlmap 을 더 선호하지만 한번 사용해 봤다.
생각보다 ebean 은 사용하기 편했고 별다른 문제가 없었지만 서로 다른 테이블 join 시에 문제가 발생했다.
ebean 의 메뉴얼을 보고 해도 안되는 것이었다… ㅜㅜ 즉
SELECT a.data1, b.data2 FROM A as a INNER JOIN B as b a.id = b.id WHERE ...
이런 쿼리를 짜고 싶다고 가정하면
Entity 2 개를 정의하고 (Ebean 에서 Entity 즉 우리가 일반적으로 Java 프로그래밍에서 말하는 Model)
A Entity
@Entity
@Table(name = "a")
public class A extends Model {
...
@OneToMany(mappedBy = "bTest", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public ArrayList b = new ArrayList<>();
}
B Entity
@Entity
@Table(name = "b")
public class B extends Model {
...
@ManyToOne(fetch = FetchType.EAGER)
public A a;
}
이렇게 정의 해주고
Ebean.find(A.class)
.select("a.data1, b.data2")
.where()
...
해도 조인이 안걸린다.. 그냥 A 테이블만 select 될뿐…
이걸로 몇일동안 메뉴얼도 보고 이래저래 다 해봤는데 실패..
결국
RawSql rawSql = RawSqlBuilder.parse(sql).create();
를 사용하여 직접 SQL 문 작성하여 만들었음…
아 정말 왜 안되는걸까?…
언젠가 해결 되면 해당 포스트에 댓글로 달겠음… ㅜㅜ