【发布时间】:2015-12-23 06:29:09
【问题描述】:
我有两个实体。一个继承自另一个。
例子:
@Entity
@Table(name = "vehicle")
@Inheritance(strategy = InheritanceType.JOINED)
public class VehicleEntity {
//id, etc., all reference fetch type is LAZY
}
@Entity
@Table(name = "car")
public class CarEntity extends VehicleEntity {
//special parameters, all reference fetch type is LAZY
}
当我使用现有汽车的 ID 在 EntityManager 上调用 find() 时,如下所示:
VehicleEntity vehicleEntity = entityManager.find(VehicleEntity.class, carID);
我取回了一个代理对象,但我需要访问 CarEntity 类的特殊方法,因为我想设置一些新参数。
有人可以帮我怎么做吗?
当然,这只是一个示例问题。更具体地说:在我调用 find 之后,我正在检查返回对象的实例,如果它是“CarEntity”我设置参数,如果不是我不做任何事情。除了“CarEntity”之外,我还有更多的继承类,并且我执行与以前相同的过程。我知道我可以通过特定对象类的“find”来解决这个问题,但是我必须多次调用“find”,当我在寻找任何“VehicleEntity”时,我总是对实际对象感兴趣所以最好的办法是全球解决方案。
【问题讨论】:
-
我认为这是一个 Hibernate 问题(WildFly 使用的默认 JPA 实现),而不是 WildFly 问题。
-
不清楚为什么您认为您不能使用特定类型作为 find 方法的参数。你能详细说明一下吗?
-
感谢指正!这是我在这里的第一个问题,对错误感到抱歉。正如我所写的,我可以使用具有特定类型的 find 方法,但是我必须调用 find 20-30 次(因为继承的类很多)。这就是为什么我正在寻找一个全局解决方案,在祖先类型上只使用一次 find,然后确定继承的类型。
-
您确定要找回代理吗?还是
VehicleEntity或VehicleEntity本身的其他实例(因为它不是抽象的)? -
你有什么理由不改变你的模型来依赖多态性呢?您的模型本身可以确定应该使用哪种逻辑,或者即使被代理,这种方法也可以返回其类类型。