我想编写一个高效的转换器,它将 JPA (1.0) 实体转换为我的传输对象,并且:
- 将在事务上下文中调用,
- 不会导致额外的数据库交互,即只会转换已经加载的内容。
我不能使用该构造if (entity.getSomething() != null)
,因为“某物”将被加载。
我唯一能想到的就是让转换器产生一个新事务,在新事务的上下文中重新加载实体并提交它——然后处理一个分离的实体。不过,它确实涉及重新加载。有什么更聪明的想法吗?
我想编写一个高效的转换器,它将 JPA (1.0) 实体转换为我的传输对象,并且:
我不能使用该构造if (entity.getSomething() != null)
,因为“某物”将被加载。
我唯一能想到的就是让转换器产生一个新事务,在新事务的上下文中重新加载实体并提交它——然后处理一个分离的实体。不过,它确实涉及重新加载。有什么更聪明的想法吗?
您可以使用XStream将您的 Entity[Implicitly Serializable
] 转换为 XML 并反序列化回对象。它可能不是有效的,但快速且易于实施。
我成功地为一个项目使用了相同的过程。
使用 Gilead 可以帮助 ORM 代理的东西。 http://noon.gilead.free.fr/gilead/
JPA 提供了一个带有 isLoaded() API 的 PersistenceUnitUtil 类,可用于确定是否加载了关系。