Description
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.