Hibernate没有获取公共成员

时间:2009-07-03 17:37:11

标签: java hibernate transient

请考虑以下代码:

@Entity
@Table(name = "a")
public class A implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    public int id;

    @Transient
    public B b;

    public B getB()
    {
        return B;
    }
}

当我获取A时,我手动填充B(另一个hibernate实体)。如果我尝试使用a.b进行访问,那么它会失败,但是,如果我使用a.getB();然后它成功了。

为什么会这样?

3 个答案:

答案 0 :(得分:1)

听起来像一个懒惰的抓取问题。当你尝试直接访问它时,公共引用为null,但是当你用“get”执行它时,Hibernate知道调用数据库并为你保存该实例。

答案 1 :(得分:1)

  1. 班级成员应该是私人的!
  2. 如果您的对象已附加到Hibernate会话,那么您正在使用代理。所以,如果你想直接访问你的类成员(这很糟糕!),你必须首先分离对象。

答案 2 :(得分:0)

因为b场是暂时的。

是否需要瞬态?尝试删除它。