duc*_*cin 12 java hibernate foreign-keys
我有一个以下的Java类,它也是一个Hibernate实体:
@Entity
@Table(name = "category")
public class Category {
@ManyToOne
@JoinColumn(name="parent_id")
private Category parent;
public Category getParent() {
return parent;
}
public void setParent(Category parent) {
this.parent = parent;
}
Run Code Online (Sandbox Code Playgroud)
类别表示类别树中的节点.我正在实现一个允许CRUD类别的Web服务.例如,接口能够创建类别树节点,并将类别id作为参数传递.
我只想创建一个新的Category对象并将其持久保存到数据库中,而不需要获取父对象.我的数据提供程序类如下所示:
public void createCategory(int parent_id, String name, CategoryType type) {
Category category = new Category();
category.setName(name);
// category.setParent(?); <- I don't have this object here
// category.setParentId(id); <- but I do have the id
category.setType(type);
this.categoryDao.save(category);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果假设我不会调用hibernate为我取父(这会很愚蠢),我该怎么做才能用parent_id设置创建一个新的Category对象?我可以为Category类提供setParentId/getParentId方法吗?它有什么休眠注释?
axt*_*avt 20
Hibernate Session.load()为这种情况提供了一种称为(相当容易混淆)的方法.
Session.load()返回具有给定标识符的惰性代理,而不查询数据库(如果具有给定标识符的对象已在当前加载Session,则返回对象本身).
您可以使用该代理初始化要保存的实体中的关系:
category.setParent(session.load(Category.class, parent_id));
Run Code Online (Sandbox Code Playgroud)
请注意,此代码不检查Category具有给定id的存在.但是,如果数据库模式中有外键约束,则在传入无效ID时会出现约束违规错误.
调用此方法的JPA等价物EntityManager.getReference().
| 归档时间: |
|
| 查看次数: |
5676 次 |
| 最近记录: |