我可以将构建器设计模式与hibernate一起使用吗?

时间:2011-01-17 13:54:26

标签: java hibernate

假设我有这门课程:

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注释将其映射到表吗?

2 个答案:

答案 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并不关心您是如何获得它的。所以是的 - 这是可能的,就像一个普通的实体一样。