Во-первых, EntityBean является интерфейсом реализации EJB, а не интерфейсом клиентского программирования. У вас никогда не должно быть ссылок на EntityBean, только EJBObject или EJBLocalObject.
Несмотря на это, нет, HashMap<EJB(Local)Object, ...>
не действует, так как хэш-код и равно не определены для EJB (Local) объекта в соответствии с EJB 3.2 необязательной спецификации, раздел 3.9 (или аналогичный язык в более ранних версиях):
Обратите внимание, что Архитектура Enterprise JavaBeans не указывает «равенство объекта» (то есть использование оператора ==) для объекта объекта ссылок. Результат сравнения двух ссылок на объекты с использованием метода Java Object Language (Object obj) Java является неуказанным. Выполнение метода Object.hashCode() для двух объектов ссылки, которые представляют объект объекта, не гарантируются , дают тот же результат. Таким образом, клиент должен всегда использовать метод isIdentical, чтобы определить, ссылаются ли на два объекта объекта объекта на один и тот же объект сущности.
В общем случае вообще нет хеша ссылки на объект bean, потому что нет способа определить его базовую идентичность. В зависимости от того, что вы делаете в своем приложении, вы можете использовать либо EJBObject.getPrimaryKey()
, либо {entityInterface, primaryKey} кортеж в качестве ключа карты (для некоторого метапрограммирования вы можете использовать EJBObject.getEJBMetaData().getRemoteInterfaceClass()
).
(Возможно, вам интересно, почему спецификация EJB ограничивает это. Сущности-объекты начинаются как локальные, а для удаленного RMI-IIOP-заглушки, по крайней мере, equals и hashCode будут сравнивать идентификатор-заглушку, а не базовый объект. вызывают проблемы для логически идентичных ссылок на объекты, полученные с помощью разных серверов или для сложных первичных ключей, где сериализованная форма отличается для логически идентичных ссылок на объекты. Возможно, теоретически спецификация EJB могла бы предоставить какой-то EJB (локальный) Object.getIdentity(), который был бы реализован hashCode и равен, но даже тогда есть сложности в определении того, имеет ли один объект beans один и тот же базовый «тип» (таблица поддержки приложения/компонента bean? или что?), но в основном это спорный момент, поскольку entity bean модель программирования мертва, используйте JPA. Если вы застряли с объектными компонентами и можете делать предположения в ваше приложение, то вы можете избежать этих сложностей/проблем и успешно использовать хеш-объекты bean-ссылок, как я описал выше.)