java - 当不级联字段时,是否需要使用@Transient?

标签 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 填充它并尝试保留它。它会告诉您不能这样做,因为您有一些没有级联的非 transient 嵌套对象(或类似的东西)。

在这种情况下,您只需要关联(没有持久性),但希望在对象处于 Activity 状态时使用这些字段,那么当您想要持久化它时该怎么办?

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

这是我的问题。谢谢!

最佳答案

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

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

关于java - 当不级联字段时,是否需要使用@Transient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9691929/

相关文章:

Java Hibernate + spring-data : Cascading Childs not working when Parent is persistent

java - 如何反转 @ManyToMany JPA 关系一侧的键值映射类型

java - Spring:单元和集成测试

java - struts2&IE 中长 URL 的 request.redirect()

java - 搜索二维数组越界

mysql - hibernate 连接在 10 到 12 小时不活动后丢失

java - Android opencv 库引用无法正常工作

hibernate : can multiple sessions share the same connection?

Hibernate Search FullTextQuery getResultSize 永远不会匹配 getResultList().size()

java - 如何像 any 一样使用字符串数组 JPA