2010-01-27 66 views
0

@Entity 公共類項目{JPA一個一對多堅持兒童及其ID

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column 
private Long id; 
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "item") 
private List<Feature> features= new ArrayList<Feature>(); 

兒童實體:

public class Feature{ 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

private String attribute1; 
private String attribute2; 
private String featureCode; 

    @ManyToOne 
private Item item; 

     ..... 
public String getFeatureCode() { 
    if (item != null) { 
    feature = item.getId() + attribute1 + attribute2; 
    } 
    return feature; 
} 

你可以從我的annotaiton看到,當項目pesist,它也會堅持自己的孩子。

由於合成ID具有非常差的聲譽,我真的需要在功能中的父母的ID爲了方便查詢,我添加了一個featureCode將三列附加在一起。

我的問題是,該項目的ID是從數據庫生成的。從調試信息中,我首先猜測它是同一個項目,然後更新Feature的項目。這會導致我的featureCode的item.getId()爲空結果。

是否有可能改變一對多的級聯持久性行爲,如堅持物品第一,然後保存它的孩子?

回答

1

您的問題很可能是您正在使用IDENTITY ID生成(AUTO)。取而代之的是使用TABLE或SEQUENCE,那麼你的id可以被預先分配,並且你可以持久訪問Item的id,而不是僅在插入之後。