假设我有这门课程:
public class MyEntity {
private int id;
private String name;
private MyEntity(int id, String name) {this.id= id; this.name = name;}
public static class MyEntityBuilder {
private int id;
private String name;
private MyEntityBuilder setId(int id) {this.id = id;}
private MyEntityBuilder setName(String name) {this.name = name;}
private MyEntity build() {return new MyEntity(id,name);}
}
private int getId() {return id;}
private String getName() {return name;}
}
我可以使用hibernate注释将其映射到表吗?
答案 0 :(得分:5)
是和否。如果您还提供制定者,则可以使用它。
Hibernate使用Java Bean来访问属性,因此它依赖于getXXX()
和setXXX()
方法。构建器模式的整个要点(至少根据Joshua Bloch)是创建不带setter的不可变对象。这不适用于Hibernate(或任何ORM),因为它们使用setter来注入值。
但是,如果您只是想使用构建器API作为流畅的界面来生成对象,同时保持其getter和setter完整,那么当然没有任何害处(除了它是代码的重复)。
BTW:Fluent setter不是有效的Java Bean setter。 Introspector
机制不理解它们。 Setter必须具有void返回类型。
答案 1 :(得分:4)
构建器是用于创建对象的外部机制。为您的实体提供默认构造函数就足够了,而hibernate并不关心您是如何获得它的。所以是的 - 这是可能的,就像一个普通的实体一样。