2013-09-28 190 views
1

我有這樣的情況下,我映射使用一對多與jointable但是,它映射到子實體

@OneToMany 
@OrderBy(value="id desc") 
@JoinTable(name="EntityOne", 
joinColumns = @JoinColumn(name="EntityTwo_id", referencedColumnName="id"), inverseJoinColumns = @JoinColumn(name="EntityThree_id", referencedColumnName="id")) 
private List<EntityThree> samples = Lists.newArrayList(); 

這工作得很好,但是,我想知道是否有此地圖的子實體的方式EntityThree。例如,爲了獲得

private List<SubEntity> samples = Lists.newArrayList(); 

其中,子實體從EntityThree.getSubEntity 了基本,子實體在EntityThree存在於您的幫助,比渴望更

感謝我,如果不明確澄清自己。

+0

SubEntity如何映射?它是一個完整的@Entity,擁有自己的DB表嗎?一個@Component?顯示SubEntity的類定義和Hibernate註釋可能會澄清問題。 – Tim

回答

1

映射到實體中的字段應該與您在數據庫表中真正具有的字段匹配。看起來你在上面的實體和EntityThree之間有一個關聯,但是在這個實體和SubEntity之間沒有關聯。因此,這個不存在的數據庫級聯繫也不應該存在於實體級別。

但是你的實體可以有方法,可以導航到實體圖:

public List<SubEntity> getSubEntities() { 
    List<SubEntity> result = Lists.newArrayListWithExpectedSize(samples.size()); 
    for (EntityThree sample : samples) { 
     result.add(sample.getSubEntity()); 
    } 
    return result; 
} 

,或者在一個功能性的方式:

public Iterable<SubEntity> getSubEntities() { 
    return Iterables.transform(samples, new Function<EntityThree, SubEntity>() { 
     @Override 
     public SubEntity apply(EntityThree input) { 
      return input.getSubEntity(); 
     } 
    }); 
} 

你也可以使用一個查詢:

select sub from MyEntity m 
inner join m.samples sample 
inner join sample.subEntity sub 
where m.id = :theId