【问题标题】:fetch attributes in hibernate with specific order以特定顺序在休眠中获取属性
【发布时间】:2013-02-11 04:59:15
【问题描述】:

我有以下情况:

class GraphUser {

    @Column(name="first_name")
    private String firstName = "";

    @Column(name="middle_name")
    private String middleName = "";

    @Column(name="last_name")
    private String lastName = "";

    @Column(name="start_point")
    private String startPointId = "";

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "points")

    private HashMap<Point> points= new HashMap<Point>();

    private Point startPoint = points.get(startPointId);

}

有什么方法可以强制休眠在创建 startPoint 属性之前获取 startPointId 点以获得正确的值?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    startPointId 的setter 中执行startPoint 赋值,或者在startPoint 的getter 中执行。 startPoint 应该是 transient or @Transient so Hibernate doesn't muck with it

    public void setStartPointId(String startPointId) {
        this.startPointId = startPointId;
        this.startPoint = points.get(startPointId);
    }
    
    // or
    
    public Point getStartPoint() {
        if (this.startPoint == null) {
            this.startPoint = points.get(startPointId);
        }
        return this.startPoint;
    }
    
    public void setStartPointId(String startPointId) {
        this.startPointId = startPointId;
        this.startPoint = null;
    }
    

    【讨论】:

    • 问题是在某些时候点图仍然是空的并且没有从数据库中获取,所以我需要任何方法来强制它在调用 getStartPoint() 之前被填充。
    【解决方案2】:

    您不需要属性,只需使用瞬态 getter。每次需要获取起点时调用它。

    @Transient
    public Point getStartPoint() {
       return points.get(startPointId);
    }
    

    这将毫不费力地工作(假设pointsFetchTypeEAGER),Hibernate 会安全地忽略它。
    实际上,每次查询HashMap 可能会有轻微的性能损失,但我不会为此烦恼。

    另外,我建议你将points声明中的HashMap替换为Map,即:

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "points")
    private Map<Point> points = new HashMap<Point>();
    

    (相应地更新 getter 和 setter)

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多