假设我有这门课:
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;}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用hibernate注释将其映射到表吗?
是的,不是.如果您还提供制定者,则可以使用它.
Hibernate使用Java Bean来访问属性,因此它依赖于getXXX()
和setXXX()
存在的方法.构建器模式的整个要点(至少根据Joshua Bloch)是创建不带setter的不可变对象.这不适用于Hibernate(或任何ORM),因为它们使用setter来注入值.
但是,如果您只是想使用构建器API作为流畅的界面来生成对象,同时保持其getter和setter完整,那么当然没有任何害处(除了它是代码的重复).
BTW:Fluent setter不是有效的Java Beans setter.该Introspector
机制不理解他们.Setter必须具有void返回类型.