如何知道某个类是否使用javax.persistence.Entity
进行注释?
人(实体)
@Entity
@Table(name = "t_person")
public class Person {
...
}
的PersonManager
@Stateless
public class PersonManager {
@PersistenceContext
protected EntityManager em;
public Person findById(int id) {
Person person = this.em.find(Person.class, id);
return person;
}
我尝试使用以下
实例进行此操作@Inject
PersonManager manager;
Object o = manager.findById(1);
o instanceof Entity // false
然而结果是false
,不应该是true
?
答案 0 :(得分:1)
@ NiVer的回答是有效的。但是,如果此时没有session或sessionFactory,则可以使用Reflection。类似的东西:
printf("The integers in order are: %.0lf %.0lf %.0lf\n",
(((((a)*((a)<=(b)) + (b)*((a)>(b)))))*(((((a)*((a)<=(b)) + (b)*((a)>(b)))))<=((c))) + ((c))*(((((a)*((a)<=(b)) + (b)*((a)>(b)))))>((c)))),
(((((a)*((a)>=(b)) + (b)*((a)<(b)))))*(((((a)*((a)>=(b)) + (b)*((a)<(b)))))<=((c))) + ((c))*(((((a)*((a)>=(b)) + (b)*((a)<(b)))))>((c)))),
(((((a)*((a)>=(b)) + (b)*((a)<(b)))))*(((((a)*((a)>=(b)) + (b)*((a)<(b)))))>=((c))) + ((c))*(((((a)*((a)>=(b)) + (b)*((a)<(b)))))<((c))))
);
答案 1 :(得分:1)
虽然现有答案提供了(某种程度上)工作解决方案,但应注意一些事项:
使用基于反射的方法意味着(a)性能开销和(b)安全限制(参见Drawbacks of Reflection)。
使用特定于ORM(此处:Hibernate)的方法会使代码可移植到其他执行环境,即应用程序容器或其他与客户相关的设置。
幸运的是,还有第三种 JPA - 检测某个Java类(类型)是否为(托管)@Entity
的方法。这种方法利用javax.persistence.metamodel.MetaModel
的标准化访问。有了它你就得到了方法
设置&lt; EntityType&gt; getEntities();
它仅列出使用@Entity
注释的类型,这些类型由您使用的当前EntityManager实例检测到。对于EntityType
的每个对象,都可以调用
类&LT; ? &GT; getJavaType();
出于演示目的,我很快编写了一个方法,该方法需要EntityManager
(此处为em
)的实例,无论是注入还是创建ad-hoc:
private boolean isEntity(Class<?> clazz) {
boolean foundEntity = false;
Set<EntityType<?>> entities = em.getMetamodel().getEntities();
for(EntityType<?> entityType :entities) {
Class<?> entityClass = entityType.getJavaType();
if(entityClass.equals(clazz)) {
foundEntity = true;
}
}
return foundEntity;
}
您可以在中心位置(例如Service类)提供此类方法(公共或受保护),以便应用程序组件轻松重用。上面的例子只是给出了一个针对纯 JPA 方法的目标。
有关参考,请参阅JPA 2.1 specification的第5.1.1节(第218页)和第5.1.2节(第219f页)。
希望它有所帮助。
答案 2 :(得分:0)
如果声明
$mail = new PHPMailer(true);
try {
$debug = NULL;
$mail->Debugoutput = function($str, $level) {
$GLOBALS['debug'] .= "$level: $str\n";
};
$mail->isSMTP();
$mail->Host = 'xxxxxxx';
$mail->SMTPDebug = 2;
$mail->SMTPAuth = true;
$mail->Username = 'xxxxxx';
$mail->Password = 'xxxxxx';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->setFrom('xx-xx@xx.com', 'xxx');
$mail->addAddress('xx-xx@xx.com');
$mail->isHTML(true);
$mail->Subject = 'xx';
$email_content = '<p>test</p>';
$mail->Body = $email_content;
$mail->send();
fncSaveLog($debug);
} catch (Exception $e) {
fncSaveLog($mail->ErrorInfo);
}
是真实的,而不是实体。