给定一个java对象,我可以通过hibernate确认它是一个持久化的bean

时间:2010-08-02 20:35:31

标签: java hibernate reflection

有时我想传入一个对象来说一个审核层,其唯一的工作是持久化实体(无论什么类型),但由于这是一个公共API,我想确定传入的object是一个hibernate实体bean,然后只尝试saveOrUpdate()

3 个答案:

答案 0 :(得分:1)

我确信在运行时你可以使用某种 jedi-reflection-trick 找出你的实体是Hibernate实体的天气(我不推荐这种方法),但是,正常情况下,你不必担心如果它不是一个休眠实体,Session.saveOrUpdate()方法会抛出一个HibernateException来解释它无法保存和/或更新它的原因。

您无法阻止使用任意对象类型调用公共方法。您可以做的是记录您的API,了解它所期望的实体类型以及如果向其传递不同内容的结果行为。

答案 1 :(得分:0)

Session界面上有一些方法采用Class参数,如createCriteria(Class)getCurrentLockMode(Class)。我没有试过这个,但你可以尝试将你的对象的类传递给其中一个方法。如果你很幸运,那么如果它不是实体类,那么就会抛出异常。

不优雅,但这是我得到的全部:)

答案 2 :(得分:0)

http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/SessionFactory.html#getClassMetadata(java.lang.Class)。从JavaDoc,返回: 与给定实体关联的元数据;如果没有映射这样的实体,则可以为null。