2015-01-02 4 views
0

В принципе, возможно?Внутренний класс как спящий компонент

Документы говорят

Компонент это содержащийся объект, который сохраняется в качестве типа значения, а не ссылки на объект.

Как и типы значений, компоненты не поддерживают общие ссылки. Другими словами, два человека могут иметь одно и то же имя, но два объекта-человека будут содержать два независимых объекта имен, которые были бы только «одинаковыми» по значению.

Основная отличительная характеристика типа значения заключается в том, что они не определяют свой собственный жизненный цикл. Мы говорим, что они «принадлежат» чем-то другим (в частности, сущности, как мы увидим позже), которая определяет их жизненный цикл.

Нестатический внутренний класс может прекрасно вписаться в это, но на практике я никогда не видел примеров. Есть ли ограничение использования внутренних классов в качестве компонентов?

ответ

1

После некоторых исследований я обнаружил, что ответ нет, это не возможно

И причина довольно проста и (в моем понимании) связан только с самим спящем инструментом, а не с какими-либо архитектурными вопросами , Hibernate требует, чтобы класс компонента имел конструктор по умолчанию no-arg и не смог создать экземпляр внутреннего класса (хотя он успешно принимает сопоставление). Я надеюсь, что эта функция будет поддерживаться в будущих выпусках Hibernate.

2

Спецификация JPA говорит:

вложимых классы должны соответствовать требованиям, указанным в разделе 2.1 для лиц с кро ме, что внедряемые классы не аннотированных в качестве лица.

и раздел 2.1 говорит:

класс Объект должен быть классом верхнего уровня.

+0

похоже, что hibernate игнорирует рекомендации JPA о вложениях –

0

Вы должны отметить внутренний класс компонентов как static.

+0

Я пробовал со статическим внутренним классом (компонент/встроенный) и не работал – joseaio

Смежные вопросы