2015-10-07 87 views
1

我想設置一個OneToOne實體使用Formula如何使用OneToOne與休眠公式

我曾嘗試以下,但結果始終是null(我猜是因爲該列KEY_MEDIA_CONTENT總是null):

@OneToOne 
@JoinColumn(name="KEY_MEDIA_CONTENT") 
@Formula(value = "SELECT MEDIAASSET_ORDER_ID AS KEY_MEDIA_CONTENT FROM PRODUCTION_MEDIAASSET_NEW WHERE KEY_TEXT=1 AND PRODUCTION_ORDER_ID=PRODUCTION_ORDER_ID") 
private MediaAssetOrder keyMediaAsset; 

這似乎是Formula被忽略。

如何使用Formula來引用實體?

回答

2

@Formula被忽略,因爲它只作爲替代@Column的有效值。而那個不用於關係映射。

但是你可以使用@Where代替,其存在的集合:

@OneToMany 
@JoinTable(name = "PRODUCTION_MEDIAASSET_NEW", joinColumns = @JoinColumn(name = "PRODUCTION_ORDER_ID", referencedColumnName = "MEDIAASSET_ORDER_ID")) 
@Where("KEY_TEXT = 1") 
private Collection<MediaAssetOrder> keyMediaAsset; 

要訪問您的原始keyMediaAsset對象,你可以使用特定的getter:

public MediaAssetOrder getKeyMediaAsset() { 
    return keyMediaAsset.isEmpty() ? null : keyMediaAsset.iterator().next(); 
}