How to Serialize Hibernate Collections Properly?

后端 未结 3 2065
时光取名叫无心
时光取名叫无心 2020-12-17 06:37

I\'m trying to serialize objects from a database that have been retrieved with Hibernate, and I\'m only interested in the objects\' actual data in its entirety (cycles inclu

相关标签:
3条回答
  • 2020-12-17 07:02

    solution described here worked well for me: http://jira.codehaus.org/browse/XSTR-226

    the idea is to have custom XStream converter/mapper for hibernate collections, which will extract actual collection from hibernate one and will call corresponding standard converter (for ArrayList, HashMap etc.)

    0 讨论(0)
  • 2020-12-17 07:02

    What generally seems to be the best way to do it, and the way I am currently doing it is to have another layer of DTO objects. This way you can exclude data that you don't want to go over the channel as well as limit the depth to which the graph is serialized. I use Dozer for my current DTO (Data Transfer Object) from Hibernate objects to the Flex client.

    It works great, with a few caveats:

    • It's not fast, in fact it's downright slow. If you send a lot of data, Dozer will not perform very well. This is mostly because of the Reflection involved in performing its magic.
    • In a few cases you'll have to write custom converters for special behavior. These work very well, but they are bi-directional. I personally had to hack the Dozer source to allow uni-directional custom converters.
    0 讨论(0)
  • 2020-12-17 07:09

    I recommend a simpler approach: user dozer: http://dozer.sf.net. Dozer is a bean mapper, you can use it to convert, say, a PersonEJB to an object of the same class. Dozer will recursively trigger all proxy fecthes through getter() calls, and will also convert src types to dest types (let's say java.sql.date to java.utilDate).

    Here's a snippet:

    MapperIF mapper = DozerBeanMapperSingletonWrapper.getInstance();
    PersonEJB serializablePerson = mapper.map(myPersonInstance, PersonEJB.class);
    

    Bear in mind, as dozer walks through your object tree it will trigger the proxy loading one by one, so if your object graph has many proxies you will see many queries, which can be expensive.

    0 讨论(0)
提交回复
热议问题