2012-03-13 70 views
0

为了说明我的问题考虑下面的例子:当不级联字段时,您是否需要使用@Transient?

@Entity 
public class Box implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long id; 

    @OneToMany //No cascade 
    private List<Item> items; 

    . 
    . 
    . 
} 

上面我们有一个Box具有一个一对多协会Item

现在说你抢了Box对象,并开始填写它与Item s并试图坚持下去。它会告诉你,你不能这样做,因为你有一些没有级联的非瞬态嵌套对象(或类似的东西)。

在这种情况下,你只需要(无持久性)的关联,但要使用这些字段,而对象是活的,你会怎么做时,你要坚持呢?

您是否列出Item?你用@Transient注解它吗?

这是我的问题。谢谢!

回答

1

如果你的项目对象不是一个数据库实体,你应该标注集合为@Transient。如果Item对象映射到数据库中,则应使用@OneToMany注释,以便从数据库读取该集合。若要防止在保存Box对象时存储此集合,您可以添加@JoinColumn注释并将可插入和可更新属性设置为false:

@OneToMany 
@JoinColumn((name="BOX_ID", insertable=false, updatable=false) 
private List<Item> items; 
相关问题