Я понимаю, что когда Hibernate загружает одно из моих сущностей из базы данных, ему необходимо построить новый экземпляр объекта, используя что-то , аналогичное - Class.newInstance()
.Альтернативы No-Args Constructor
Таким образом, Hibernate будет жаловаться, когда он пытается сериализовать классы, которые не выставляют конструктор без ARGS:
javax.persistence.PersistenceException: org.hibernate.InstantiationException: No default constructor for entity: : com.acme.Person
Давайте предположим, что com.acme.Person
класс из внешней библиотеки третьей стороны. Это означает, что я не могу изменить определение класса и не могу добавить конструктор по умолчанию в соответствии с запросом.
Каковы мои альтернативы?
С концептуальной точки-обзора, было бы здорово, если бы я мог обеспечить Hibernate с завода, что-то вроде:
public class PersonFactory implements Factory<Person> {
public Person create() {
// ctor takes firstName, lastName
return new Person(null, null);
}
}
Используя этот экземпляр Person
, Hibernate будет иметь возможность использовать стандартные методы отражения для повторной установки переменных-членов (в данном случае firstName
и lastName
) со значениями, загружаемыми из базы данных.
Я нашел комментарий об использовании пользовательских UserType
для обработки сериализации/десериализации этого типа. Это похоже на полный перебор, нет никакой индивидуальной логики сериализации в per se, и я не заинтересован в написании пользовательских nullSafeSet
/nullSafeGet
.