我正在构建使用Hibernate查询数据库的通用方法,以下方法通过主键查询实体的信息。
@PersistenceContext(unitName = "UnitPers")
private EntityManager entity;
public Object findByPk(Class clazz, Object pk) throws Exception {
Object obj = null;
try {
obj = entity().find(clazz, pk);
} catch (Exception e) {
throw e;
}
return obj;
}
此方法可以正常工作,但我不想在进行调用时进行强制转换(对象为myTypeEntity)。
private myTypeEntity entity;
entity = (myTypeEntity) findByPk(myTypeEntity.class, new Bigdecimal("1"));
//GET and SET Methods
我想避免在调用此方法时执行转换,请记住它是泛型的目的之一,但我没有设法做到这一点,任何想法?或者我打算做的事情是不可能的。
答案 0 :(得分:2)
您可以使用泛型而不是使用Object:
public <T> T findByPk(Class<T> clazz, Object pk) throws Exception {
T obj = null;
try {
obj = entity().find(clazz, pk);
} catch (Exception e) {
throw e;
}
return obj;
}
然后它应该可以在不进行演员表的情况下工作
private myTypeEntity entity;
entity = findByPk(myTypeEntity.class, new Bigdecimal("1"));
答案 1 :(得分:1)
通过在方法级别引入泛型类型变量,您可以定义应返回的类型,这可以在@cpr4t3s' answer中看到。
您还可以将其代码段缩短为以下内容:
public <T> T findByPk(Class<T> clazz, Object pk) throws Exception {
return entity().find(clazz, pk);
}
由于:
catch
- 阻止obj
- 变量