2013-09-30 2 views
-2

У меня есть класс, который ссылается на java.lang.reflect.Method, и мне нужно сохранить этот класс и эту ссылку.Как сохранить java.lang.reflect.Method в базу данных через Hibernate

Кто-нибудь знает, как это сделать?

Мне кажется, что я не могу сделать это прямолинейно, но я думаю, что могу разложить java.lang.reflect.Method на имя класса, имя метода, параметры имени класса и хранить эти строки. Таким образом, я мог бы сгенерировать объект Method из них при загрузке.

Имеет ли смысл? В таком случае любая идея о том, как это сделать?

+2

У вас есть правильная идея, просто выполните. –

ответ

0

Вы не можете сохранить экземпляр Method в базе данных. Это не сериализуемо.

Лучшее, что вы могли бы сделать, это создать пару строк, которые представляют имя и подпись метода, и полное имя класса, который его определяет. Если вы храните их в базе данных, вы можете восстановить MethodClass) с помощью отражения ... при условии, что класс доступен в пути к классам.

Любая идея о том, как это сделать?

Это должно быть довольно прямо вперед использование Class и Method API. Я предлагаю вам прочитать соответствующие javadocs и попытаться закодировать его самостоятельно. Если у вас есть проблемы, задайте следующий вопрос, включая код, который дает вам проблемы.


И вы знаете, как/где я должен указать, что де-состав и реконструкции стратегии? Я бы хотел, чтобы Hibernate сделал это для меня, чтобы я не загрязнял свой модельный уровень бизнеса.

В вашем коде Java. Это не то, что Hibernate/JPA сделает для вас автоматически. (Для начала, предостережение о классе присутствуя на пути к классам на самом деле означает, что обратное преобразование не может быть гарантированно работать ...)


На самом деле, ваше «требование» на сохраняющиеся Method объектов (в некоторых форма или другое) является признаком того, что ваш дизайн приложения получил способ слишком сложный ... IMO.

+0

Спасибо, Стивен! Это оно. И знаете ли вы, как/где я должен указать, какие стратегии декомпозиции и реконструкции? Я бы хотел, чтобы Hibernate сделал это для меня, чтобы я не загрязнял свой модельный уровень бизнеса. –

+0

Извините, мой последний комментарий. Я не прочитал полный ответ. Еще раз спасибо! –

+0

Да, я полностью согласен: это обычно означает плохой дизайн, но это тестовое приложение, которое должно быть динамически настроено конечными пользователями. Вот почему это интенсивно отражается. Я никогда не делаю этого в базовых приложениях. –

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