Тип преобразователей для постоянства
Создайте преобразователь типа для сущности, а затем просто передайте user.account
вместо user.account.id
. Это вызовет getUser().setAccount(account)
и не вызовет у вас головной боли.
Когда вы обновляете запись, просто передайте user.account
как скрытое поле в форме.
Что касается широко распространенного решения для ваших организаций, у вас есть несколько вариантов:
Несколько конвертеров
Создайте абстрактный преобразователь типов, который обрабатывает большую часть логики, чтобы у вас был действительно легкий подкласс для каждой сущности. Зарегистрируйте каждый конвертер в вашем xwork-conversion.properties
.
Интерфейсно-управляемый преобразователь
Подход, который я использую, заключается в том, что у меня есть интерфейс под названием IdBasedJpaEntity
, который реализуют 99,9% моих организаций. Он определяет getId()
метод типа Integer
. Затем у меня есть JpaDAORegistry
синглтон-класс, который я создаю при запуске моего приложения. Я регистрирую каждую из своих сущностей в нем, и он создает отдельный экземпляр каждого DAO (в основном, синглтон де-факто). У меня есть карта класса сущности для экземпляра DAO. Это позволяет моему конвертеру типов искать соответствующий экземпляр DAO для любого данного IdBasedJpaEntity
, позволяя мне иметь единственный класс JpaEntityConverter
, который работает с любым объектом, который реализует интерфейс. Этот маршрут немного сложнее, но для меня он оказался многократно используемым.