我希望通过运行类似select * from <table> where id = ?
的内容将数据加载到hibernate实体中。我只对<table>
- no 加入的数据感兴趣。
我可以通过以下方式实现这一目标:
T result = (T) getSession()
.createSQLQuery("SELECT * FROM " + tableName + " WHERE " + idColumn + " = ?")
.setInteger(0, id)
.setResultTransformer(new AliasToBeanResultTransformer(type))
.uniqueResult();
但这仅适用于没有关系的实体。对于与另一个实体有关系的任何实体,当结果转换器尝试在我的实体上设置一些PropertyNotFoundException
属性时,我得到<relationshipName>_id
(例如org.hibernate.PropertyNotFoundException: Could not find setter for administration_id on class com.xxxxxx.xxxx.model.AdministrationPIN
是否有其他变形金刚可以自动处理此问题。或者,如果我要使用Criteria.ALIAS_TO_ENTITY_MAP
结果转换器,可能会从实体映射中使用某种对象绑定器?
更新
非常重要的是,将表中的所有数据加载到实体中,包括关系数据。因此,如果实体A
具有包含实体B
的OneToOne,并且我使用此方法加载实体A
,则a.getB()
应返回B
的实例,但是B
实例应仅填充其标识符。