Java 非映射属性的休眠条件
我有一个树状对象,由Hibernate管理。对象有一个子对象列表,每个子对象在父对象中都有自己的Java 非映射属性的休眠条件,java,hibernate,orm,criteria-api,Java,Hibernate,Orm,Criteria Api,我有一个树状对象,由Hibernate管理。对象有一个子对象列表,每个子对象在父对象中都有自己的自定义顺序: <hibernate-mapping> <class name="MyClass" .../> <property .../> <property .../> <list name="children" cascade="save-update" inverse="false"> <key colu
自定义顺序
:
<hibernate-mapping>
<class name="MyClass" .../>
<property .../>
<property .../>
<list name="children" cascade="save-update" inverse="false">
<key column="parent_id"/>
<index column="custom_order"/>
<one-to-many class="MyClass"/>
</list>
</hibernate-mapping>
因为没有这样的POJO属性
问题:有没有一种方法可以在不添加POJO getter/setter的情况下为这个场景使用CriteriaAPI
编辑:我不介意将相关的
custom\u-order
属性添加到MyClass
中,但我认为在Hibernate中这是不可能的。您不能在条件查询中包含unmapped属性。当您执行criteria.list()或criteria.uniqueResult()时,Hibernate将引发nu映射属性异常。您可以在运行时将属性添加到Hibernate映射中,然后在criteria
中使用它 可以将custom\u order
属性映射到MyClass
,而无需为此属性添加getter或setter。只需将custom\u order
属性配置为按字段访问即可
另外,为了防止开发人员使用反射更改custom\u-order
属性,通过将insert
和update
设置为false
,将custom\u-order
设置为只读:
<property name="customerOrder" column="custom_order" access="field" insert="false" update="false"/>
你介意解释一下我如何为这样一个列表索引定义一个属性吗?太棒了,正是我所需要的!
<property name="customerOrder" column="custom_order" access="field" insert="false" update="false"/>
addOrder(new NativeSQLOrder("custom_order" ,true))