Как сопоставить тип данных пользователя (составной тип) с Hibernate - PullRequest
2 голосов
/ 14 марта 2012

Я совершенно новичок в мире гибернации.Я смоделировал с помощью ER CASE TOOL (TOAD) мою базу данных, и я определил несколько пользовательских типов данных (составной тип).Например, предположим, что у меня есть тип Contact, объявленный как следующий в PostgreSQL

CREATE TYPE Contact AS
( "email" Varchar,
"phone" Varchar,
"mobile" Varchar,
"other" Varchar );

Теперь предположим, что я использую его на сущности пользователя, как в следующем коде SQL

CREATE TABLE Users(
idUser Serial NOT NULL,
login Character varying(20) NOT NULL,
password Character varying(20) NOT NULL,
name Character varying(30),
surname Character varying(50),
contact Contact
)  

-- Add keys for table Users

ALTER TABLE Users ADD CONSTRAINT pkIdUser PRIMARY KEY (idUser)
;

Я настроил и использовалHibernate Инструменты для обратного инжиниринга модели ER, но у меня есть проблема с определением пользовательского типа Contact, потому что он отображается как Сериализуемый, а не как пользовательский тип. Я пытаюсь определить контактный Hibernate UserType иизменить в соответствии с файлом reverse.xml Hibernate Tools ..... но когда я пытаюсь использовать свою реализацию UserType, я получаю следующее сообщение:

"org.hibernate.cfg.JDBCBinderException:Тип it."

У вас есть ссылка наРеализовать пример того, как этого добиться?До сих пор у меня не было возможности отобразить пользовательский тип данных ... Я собираюсь удалить пользовательский тип данных из модели ER и разбить поля, из которых он состоит.

Я использую Hibernate3.5.4

С уважением и заранее спасибо за вашу поддержку.

1 Ответ

1 голос
/ 14 марта 2012

Дайте мне знать, если это решит проблему. Вот пример реализации postgres / hibernate http://www.hibernatespatial.org/tutorial.html

или другая информация, которая может быть полезна в этой ситуации:

Я предполагаю, что вы объявили свои объекты Java с аннотацией объекта. Создайте объект ContactUsetype, расширяющий объект Hibernate Usertype.

public Object nullSafeGet(ResultSet resultSet, String[] email, String[] phone, String[] mobile, String[] other, Object owner)
throws HibernateException, SQLException {
assert email.length == 1;
assert phone.length == 1;
assert mobile.length==1;
assert other.length==1

if (resultSet.wasNull()) {
return null;
}
final Contact contactVariable = new Contact(resultSet.getObject(email[0]).toString()
                                       ,resultSet.getObject(phone[0]).toString(),
                                        resultSet.getObject(mobile[0]).toString(),
                                        resultSet.getObject(other[0]).toString());
return contactVariable;
}

public void nullSafeSet(PreparedStatement statement, Object value, int index)
throws HibernateException, SQLException {
statement.setObject(index, value);
}
}

Наконец, когда вы создаете объект пользователя

Users user= new User(..., new Contact ("(some@email.com,123-456-4566,111-11-1111,aim)")
...