如何避免Lazy fetch,即使它被设置为lazy fetch模式和ecrypt / decrypt列.....?

时间:2011-12-05 11:29:39

标签: java hibernate

我的dto中有一对多的关联,

家长DTO:问题
儿童DTO:历史

问题1:

表示一个问题记录有很多历史记录,我正在使用JPA2.x和hibernate, 我用延迟提取方法/模式绑定实体。有些地方我想偷懒取材...... 有些地方我不想懒惰的取物甚至不是egar。意味着我不想要数据收集本身。我只需要父类列表,即使我调用了getHistories()方法,它也不应该在少数几个地方进行延迟提取....如何使用entityManager来避免延迟提取.....即使集合设置为懒惰的获取模式.....?

问题2:

我需要使用mysql编码/解码函数加密问题。插入时加密值并保存。当选择解码内容.....

解决方案可以是映射或条件查询......?

提前致谢....!

2 个答案:

答案 0 :(得分:0)

问题1:

您的要求毫无意义。如果您不想访问历史记录,请不要致电getHistories()。如果您访问历史记录集合,要么附加了您的问题,并且将加载该集合,或者它已分离,您将获得延迟加载例外。

问题2: 见http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/annotations/ColumnTransformer.html。 javadoc中的示例正是您想要做的。

答案 1 :(得分:0)

对于问题1,您需要做两件事,

  1. 如果您希望您的父子实体被选中'懒惰',则使用fetch = lazy注释bir-directional字段。只要你不加载或触摸'其中一个延迟加载的字段。

  2. 如果您希望选择父母子实体,那么请将双向关联中的字段分配为fetch = eager。

  3. 如果你想要某些地方我甚至不想懒惰的取物甚至不是egar'那么你必须在代码时间决定是否在父母之间建立关系 - 子实体,如果你没有,那么就不要映射双向关联。您 CAN 创建多个实体类来映射不同的协议,甚至是没有关联的实体。