如果没有级联字段,您需要使用@Transient吗?

时间:2012-03-13 20:50:54

标签: java hibernate jpa persistence

为了说明我的问题,请考虑以下示例:

@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填充它并试着坚持它。它会告诉你,你不能这样做,因为你有一些没有级联的非瞬态嵌套对象(或类似的东西)。

在这种情况下,你只想要一个关联(没有持久性),但你想在对象存活时使用这些字段,当你想要持久化它时你会怎么做?

您是否将Item列表清空?你用@Transient注释它吗?

这是我的问题。谢谢!

1 个答案:

答案 0 :(得分:1)

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

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