【发布时间】:2021-12-17 14:34:29
【问题描述】:
我想知道为什么休眠的“get”和“load”在区分实体方面表现不同?
映射:
@Entity
@Table(name = "person")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "type")
public abstract class BasePerson {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
protected Integer id;
@Column(name = "name")
private String name;
...
@Entity
@DiscriminatorValue("COMPANY")
public class Company extends BasePerson {
...
@Entity
@DiscriminatorValue("CITIZEN")
public class Citizen extends BasePerson {
...
以下调用返回特定的子实体(公司或公民):
(BasePerson) hibernateTemplate.getSessionFactory().getCurrentSession().get(BasePerson.class, id);
以下调用仅返回超级实体 BasePerson:
(BasePerson) hibernateTemplate.getSessionFactory().getCurrentSession().load(BasePerson.class, id);
为什么会这样?如何使用 load() 但获取具体实现(Citizen 或 Company 对象)?
【问题讨论】: