2016-09-10 3 views
1

외래 키가없는 다른 엔티티에 연결하는 엔티티에 속성을 (가상으로) 매핑하고 싶습니다. 이미 관련된 테이블에 매핑되는 키에 대한 getter가 있습니다.외래 키가없는 hibernate/JPA 테이블을 매치하는 방법

기존 데이터베이스.

표 달걀

+----------------------+------------------+------+-----+---------+-------+ 
| Field    | Type    | Null | Key | Default | Extra | 
+----------------------+------------------+------+-----+---------+-------+ 
| id     | int(10) unsigned | NO | PRI | 0  |  | 
| pid     | varchar(60)  | NO |  |   |  | 

표 바구니

+----------------------+------------------+------+-----+---------+-------+ 
| Field    | Type    | Null | Key | Default | Extra | 
+----------------------+------------------+------+-----+---------+-------+ 
| id     | int(10) unsigned | NO | PRI | 0  |  | 
| pid     | varchar(60)  | NO |  |   |  | 

엔터티 계란

@SuppressWarnings("serial") 
@Entity 
@Table(name = "egg") 
public class Egg implements java.io.Serializable { 
    private long id; 
    private String pid; 
    ... 
    @Column(name = "pid") 
    public String getPid() { 
    return this.pid; 
    } 

바구니 엔티티가 이미 난자 용으로 설정된 PID 게터와 유사하다.

조인을 모델링하고 싶습니다.

LEFT JOIN egg ON basket.pid = egg.pid 

pid 매핑 테이블 중 하나에 외래 키가 없습니다.

달걀 엔티티에서 바구니 속성을 만들려고했습니다.

예컨대

@JoinColumn(name = "pid", referencedColumnName = "pid", updatable = false, insertable = false) 
public Basket getBasket(

물론 최대 절전 모드에서는 표에 '바스켓'열이 없다는 불만이 있습니다.

이 달걀 바구니를 얻으려면 어떻게해야합니까?

+0

는'@ ManyToMany' 주석이 누락되지가요'@ JoinColumn' 전에? –

답변

0

@JoinColumnsOrFormulas 주석을 사용해보세요. 이 같은

뭔가 작업을해야합니다 :

@ManyToOne 
@JoinColumnsOrFormulas({ 
    @JoinColumnOrFormula([email protected](value="(SELECT b.id FROM Basket b WHERE b.pid = pid)", referencedColumnName="id")), 
    @JoinColumnOrFormula(column = @JoinColumn(name = "pid", referencedColumnName="pid")) 
}) 
private Basket getBasket() { 
    return this.basket; 
} 
관련 문제