相关疑难解决方法(0)

instanceof和Class.isAssignableFrom(...)有什么区别?

以下哪项更好?

a instanceof B
Run Code Online (Sandbox Code Playgroud)

要么

B.class.isAssignableFrom(a.getClass())
Run Code Online (Sandbox Code Playgroud)

我所知道的唯一区别是,当'a'为null时,第一个返回false,而第二个抛出异常.除此之外,他们总是给出相同的结果吗?

java reflection instanceof

441
推荐指数
9
解决办法
25万
查看次数

关于LAZY加载的Hibernate 4 ClassCastException,而EAGER正常工作

我为地理区域(如大洲,国家,州等)提供了以下JOINED继承根实体:

@Entity
@Table(name = "GeoAreas")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class GeoArea implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    protected Integer id;

    @Column
    protected String name;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id", referencedColumnName = "id")
    protected GeoArea parent;

    ...
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,地理区域有一个简单的自动ID,如PK,名称以及与其父级的关系(自引用).请注意parent映射为的地理区域关系FetchType.LAZY.在数据库中,FK parent_id正在NOT NULL使关系成为可选的.默认为@ManyToOneis optional = true,因此映射似乎是正确的.

子类定义了其他属性,实际上并不重要.数据库中的数据正确链接,因为可以通过JPQL列出地理区域而没有问题(FetchType.EAGER映射略有不同parent,请参见文本结尾):

竞技场列表与EAGER加载

每一行都是以下的实例:

public class ArenaListViewLine
{
    private final Integer arenaId;
    private final String arenaName;
    private final String arenaLabel;

    private …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa lazy-loading classcastexception hibernate-4.x

8
推荐指数
1
解决办法
7796
查看次数

JPA EntityManager查找方法返回代理

我有两个实体.一个继承自另一个.

例:

@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
}
Run Code Online (Sandbox Code Playgroud)

当我在EntityManager上使用现有汽车的id调用find()时,如下所示:

VehicleEntity vehicleEntity = entityManager.find(VehicleEntity.class, carID);
Run Code Online (Sandbox Code Playgroud)

我找回了一个代理对象,但我需要访问CarEntity类的特殊方法,因为我想设置一些新的参数.

有人可以帮我,我该怎么做?

当然这只是一个示例问题.更具体地说:在我调用find之后我正在检查返回对象的实例,如果它是"CarEntity"我设置参数,如果不是我什么都不做.我在"CarEntity"旁边有更多的继承类,我和以前一样做了同样的程序.我知道我可以用特定对象类的"find"来解决这个问题,但是我必须多次调用"find",当我正在寻找任何"VehicleEntity"时,我总是对实际对象感兴趣所以最好的是全球解决方案.

java hibernate jpa

3
推荐指数
1
解决办法
3208
查看次数