我想编写一个有效的转换器,它将把JPA(1.0)实体转换为我的传输对象,并且:
- 将在事务上下文中调用,
- 不会引起额外的DB交互,只会转换已经加载的内容。
我不能使用结构if (entity.getSomething() != null)
,因为"某些东西"将被加载。
我唯一能想到的是让转换器生成一个新事务,在新事务的上下文中重新加载实体并提交它—然后研究一个独立的实体。不过,它确实需要重新装弹。有更聪明的主意吗?
您可以使用XStream将您的实体[隐式Serializable
]转换为XML &反序列化回对象。它可能不是高效的,但速度很快。易于实现。
我成功地在一个项目中使用了相同的过程。
使用吉利德可以帮助ORM代理。http://noon.gilead.free.fr/gilead/
JPA提供了一个带有isLoaded() API的PersistenceUnitUtil类,该API可用于确定是否加载关系。