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