jackson-datatype-hibernate icon indicating copy to clipboard operation
jackson-datatype-hibernate copied to clipboard

When serialzing with DefaultTyping and hibernate, it is impossible to deserialize some models

Open kmorozov opened this issue 9 years ago • 1 comments

Consider a class that looks like this:

class BeanOne
{
  int id;

  @OneToMany(fetch = FetchType.LAZY)
  List<BeanTwo> links;
}

class BeanTwo
{
  int id;
}

BeanOne and BeanTwo are managed by Hibernate via JPA. If I set DefaultTyping.JAVA_LANG_OBJECT on my Object mapper, and then serialize the bean, the output will depend on if i loaded the bean from the Database.

In the case where the bean is not loaded from the database the json would look like this:

{
  "id": 1,
  "links": [
    {
      "id": 2
    },
    {
      "id": 3
    }
  ]
}

In the case where the bean is loaded from the database the json would look like this:

{
  "id": 1,
  "links": [
    [
      "com.example.BeanTwo",
      {
        "id": 2
      }
    ],
    [
      "com.example.BeanTwo",
      {
        "id": 3
      }
    ]
  ]
}

Now, in principle, everything is working as intended, because Hibernate replaces the Lists with PersistentBags which have a raw-type List inside. Jackson will thus see the raw array and add types like the friendly serializer that it is. However, when I try to deserialize that json, it fails because jackson does not expect type information for the 'links' field since that field has an explicit type.

I am not sure if this qualifies as a bug or a feature request, but I think that there should be some way to reconcile these two features.

kmorozov avatar Apr 21 '16 18:04 kmorozov

wow, still not solved? Has anyone found a working way to handle this?

MichaelSp avatar Nov 05 '18 09:11 MichaelSp