为了说明我的问题,请考虑以下示例:
@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/