大佬教程收集整理的这篇文章主要介绍了使用泛型和jpa EntityManager方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
您已经开始使用良好的模式。下一步是为每种实体类型创建Persistservice的子类。我还将提到,从长远来看,您可能希望为每个实体都有一个通用的基类或接口。例如,我将其称为Entity
。该基类(如果是类而不是接口)可以是抽象的,并且可以为所有实体定义通用方法。
public interface Entity {
long getID();
}
您可以使用Entity
在的实现中定义的方法Persistservice
(当您在此基本服务或代码的其他位置添加更多与实体相关的通用业务逻辑时,@R_425_9381@它们很方便)。
您的实体A
看起来像
public class A extends Entity {
}
你Persistservice
成为
public abstract class Persistservice<T extends Entity> {
// Your common methods (persist, remove, etc.).
public abstract Class<T> getEntityClass();
}
您的特定于实体的服务如下所示
public class APersistservice extends Persistservice<A> {
public Class<A> getEntityClass() {
return A.class;
}
}
然后getEntityClass()
,您可以在实现时使用该方法Persistservice.remove()
。
尽管特定于实体的子类解决了面对类型擦除的特定类对象的问题,但您最终会发现您希望该子类也支持特定于实体的查询。
我可以同时使用泛型和JPA吗?
我试图将四个类的对象保留到我的数据库中。这是我的Persistservice类别:
public class Persistservice<T> {
private static EntitymanagerFactory emf = Persistence.createEntitymanagerFactory("fileUploadProject");
public static Entitymanager getEntitymanager() {
return emf.createEntitymanager();
}
// Write Client to Database
public static <T> void persist(T obj) {
Entitymanager em = getEntitymanager();
Entitytransaction et = em.gettransaction();
et.begin();
em.persist(obj);
et.commit();
em.close();
}
}
但是后来我遇到了删除对象的问题。除上述内容外,我在Persistservice类中还有以下方法:
// Remove an object from the Database if they exist
public static <T> void remove(Long id) {
Entitymanager em = getEntitymanager();
Entitytransaction et = em.gettransaction();
<T> obj = em.find(<T>.class,id);
}
最后一行给我一个编译时错误。我试着<T>.class
T
Class<T>
和T.class
好,但它仍然给了我一个编译时错误。刚刚学习类型擦除,是因为这个错误吗?我该如何解决这个问题?
以上是大佬教程为你收集整理的使用泛型和jpa EntityManager方法全部内容,希望文章能够帮你解决使用泛型和jpa EntityManager方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。