0

考虑以下代码:

@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(另一个休眠实体)。如果我尝试使用 ab 访问,那么它会失败,但是,如果我使用 a.getB(); 然后它成功了。

为什么是这样?

4

3 回答 3

1

听起来像是一个懒惰的获取问题。当您尝试直接访问公共引用时,它是空的,但是当您使用“get”进行访问时,Hibernate 知道调用数据库并为您填充该实例。

于 2009-07-03T18:05:20.277 回答
1
  1. 班级成员应该永远是私人的!
  2. 如果您的对象附加到 Hibernate Session,那么您正在使用代理。所以,如果你想直接访问你的类成员(这很糟糕!),你必须先分离对象。
于 2009-07-03T18:14:02.280 回答
0

因为 b 场是瞬态的。

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

于 2009-07-03T18:26:27.777 回答