是否可以与属性进行一对一映射,而不是使用主键?基本上,我想要做的是在我的“父”类中拥有一个属性,该类只根据一些规则对其中一个子进行一次引用。例如,它可能是“最后添加的孩子”。我知道这对查询来说相当简单,但是有可能拥有“智能”属性吗?所以除了.load(Parent.class,pk)之外你不必编写任何东西,然后从那里开始使用实例。
同样的问题适用于一对多关系,是否也可以为此应用规则?最后,是否可以将这些规则与参数集成到getmethod?
所以你可以有一个getChildren(from,to)ish方法:)
答案 0 :(得分:1)
我会尝试使用formula属性。这将允许您使用SQL,列或其他表达式定义更复杂的映射。当我回到家时,我将不得不更多地研究这个问题,但这里有一些例子和文章让你开始。显然,源代码也有org.hibernate.test.onetooneformula
Many-to-One Formula Forum Post
答案 1 :(得分:0)
Hibernate实体是Java对象。没有什么可以阻止你将逻辑写入这些对象。实际上如果你这样做是件好事。你可以这样:
@Entity
public class Parent {
...
@OneToMany
private Set<Child> children;
...
public Set<Child> getChildren() {
if (children == null) {
children = new HashSet<Child>();
}
return children;
}
public Child getLastAddedChild() {
for(Child child: getChildren()) {
... logic ...
}
return lastAddedChild;
}
}
请注意,此实现未进行优化,仅作为示例。但你可以做各种各样的事情,比如拥有一个@Transient字段来保存最后添加的子节点(在getLastAddedChild()方法中使用延迟初始化),或者隐藏你的集合并使用一种方法将子节点添加到你的对象等。
正如我所说,hibernate实体是对象。在良好的OO设计中,真实对象具有与之相关的行为。我建议你对DDD(领域驱动设计)做一些研究。