Hibernate(JPA)实体与静态集合作为成员

时间:2010-06-10 23:30:52

标签: java hibernate orm jpa

是否可以将静态集合作为hibernate实体的成员?

说我有一个对象问题:

public class Question {
    private String category;

    ...
}

是否可以填充静态Set< String>这是数据库中所有类别的一组不同的?我知道我可以查询这个,但我想知道是否有一个更优雅的解决方案,因为它似乎是其他人可能遇到的事情。

3 个答案:

答案 0 :(得分:2)

据我所知,JPA无法保留staticfinal字段。规范在这方面不是很清楚,但它使IMO有意义,因为我没有看到OneToXXX关系中的那个(所以JPA应该如何加载它)。您可能希望从ejb3专家组检查the following thread以获得一些反馈(即不是最终答案)。我担心您会以某种方式将所有Question与所有Category相关联。

但也许你会得到更多“令人满意”的答案。我们来看看。

答案 1 :(得分:2)

简单但不完美的解决方案是在@PostLoadCategory实体(或两者)上使用实体Question回调方法:

@Entity
public class Question {
  public static Set<String> categories = new HashSet<String>();
  ...

  @PostLoad
  public void fillInCategories() {
    categories.add(category);
  }

}

categories是延迟加载的 - 直到所有包含每个类别的问题都被加载后才会完成。

答案 2 :(得分:0)

使用属性访问。

默认情况下,ObjectDB直接访问字段,但也支持使用get和set方法间接访问字段:

@Access(AccessType.PROPERTY)