Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 有没有办法检查类是否是可持久的_Jpa - Fatal编程技术网

Jpa 有没有办法检查类是否是可持久的

Jpa 有没有办法检查类是否是可持久的,jpa,Jpa,JPA中是否有任何方法可以实际检查一个类是否持久(用@Entity注释)?检查该类是否具有实体注释: if (clazz.isAnnotationPresent(Entity.class)){ // } 实体可能存在,但由于不同的原因,您的JPA实现可能不会映射该类 下面是一种检查EntityManagerFactory是否已映射它的方法: EntityManagerFactory.getMetamodel().entity(clazz); 如果它不是EntityManagerFact

JPA中是否有任何方法可以实际检查一个类是否持久(用@Entity注释)?

检查该类是否具有
实体
注释:

if (clazz.isAnnotationPresent(Entity.class)){
   //
}
实体可能存在,但由于不同的原因,您的JPA实现可能不会映射该类

下面是一种检查
EntityManagerFactory
是否已映射它的方法:

EntityManagerFactory.getMetamodel().entity(clazz);

如果它不是EntityManagerFactory映射的实体,它将抛出一个
IllegalArgumentException

如果它是用@entity而不是XML配置注释的,则可以检查它。 你有两个选择:

  • 在运行时使用
  • 在编译时使用,这更复杂
公共静态void main(字符串[]args){
Class cls=YourClassName.Class;
System.out.println(“是否对实体进行了注释?”+cls.isAnnotationPresent(entity.class));
}

如果您试图持久化一个不受JPA支持的类,您将得到一个运行时异常。您具体在寻找/试图缓解哪些问题?您可能希望使用类似于
getClass().getAnnotations()
的方法来查询某个对象的注释。为什么要投反对票?人们能解释一下他们投否决票的时候出了什么问题吗?这样人们就知道在未来需要改进什么了future@Makoto在我们使用命令模式的框架中,命令可以持久化到DB,也可以不持久化。为了控制这一点,我们在每个命令上都有一个标志isPersistent()。我想删除那个标志,并将我们的逻辑建立在实体注释的基础上(如果存在持久化命令,如果没有,那么就不要…),也许问题是“类是持久化的?”。或者你考虑过类实例aka object吗???在投票之前,你能告诉我这段代码有什么问题吗?我想原因是,代码没有格式化为代码。然而,这个答案是有用的,我同意如果人们在点击DownVote之前指出这一点会更好,因为你没有描述。这是解决方案,还是一些随机代码?它是如何解决这个问题的,你对OP的代码做了什么改变。需要更多的解释和信息;)对如果我们想知道这个类是用@Entity注释的。同样,如果想知道一个类是否用talbe注释,只需保留Table.class即可
public static void main(String[] args) {
     Class<?> cls = YourClassName.class;
     System.out.println("is entity annotated? "+cls.isAnnotationPresent(Entity.class));
}