【发布时间】:2014-02-24 18:52:11
【问题描述】:
我正在使用 JPA 2.0 和 Hibernate 4.2.5。 我有一个到相同实体类型的双向映射。
@OneToMany(mappedBy = "parent", cascade = { CascadeType.PERSIST, CascadeType.DETACH }, orphanRemoval = true, fetch = FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@OrderColumn(name = "position", nullable=false)
private List<MenuItem> children = new ArrayList<MenuItem>();
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinTable(name = "MenuItem_MenuItem", joinColumns = { @JoinColumn(name = "child_id") }, inverseJoinColumns = { @JoinColumn(name = "parent_id") })
private MenuItem parent;
这个映射创建了一个带有 parent_id、child_id 和 position 列的可连接。当我想将孩子添加到父母时,我会执行以下操作:
MenuItem newItem = service.persist(..);
parent.getChildren().add(newItem);
newItem.setParent(parent);
service.merge(newItem);
service.merge(parent);
生成以下内容:
Hibernate: select nextval ('hibernate_sequence')
Hibernate: insert into MenuItem (menu_id, message, messageId, params, id) values (?, ?, ?, ?, ?)
Hibernate: insert into MenuItem_MenuItem (parent_id, child_id) values (?, ?)
这里的问题是第二个插入不包含位置属性,所以它保持为空。我做错了什么?
编辑 我正在使用 Spring 声明式事务管理,并且我所有的合并和持久方法都使用 @Transactional 进行了注释。会不会有问题?
【问题讨论】:
-
我已经编辑了下面的答案(请参阅编辑),其中包含指向休眠文档的链接,他们建议将索引列映射到 @Column
标签: java hibernate jpa jpa-2.0