gpt4 book ai didi

java - 如何使用 Hibernate 映射用户数据类型(复合类型)

转载 作者:行者123 更新时间:2023-11-30 11:46:33 25 4
gpt4 key购买 nike

我对 Hibernate 世界还很陌生。我已经通过 ER CASE TOOL (TOAD) 对我的数据库进行建模,并且定义了几种用户数据类型(复合类型)。例如,假设我在 PostgreSQL 中声明了一个 Contact 类型

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 Tools 对 ER 模型进行逆向工程,但我在 Contact 用户类型的定义上遇到问题,因为它被映射为 Serializable 而不是自定义类型,这是我想要的是定义一个 Contact Hibernate UserType 并根据 Hibernate Tools 的 reverse.xml 文件进行更改......但是当我尝试使用我的 UserType 实现时,我收到此消息:

"org.hibernate.cfg.JDBCBinderException: The type it.mypackage.FullContactInfoType found on Table: users column: fullcontactinfo spans multiple columns. Only single column types allowed. The type it.mypackage.FullContactInfoType found on Table: users column: fullcontactinfo spans multiple columns. Only single column types allowed. "

你有没有关于如何实现这一点的简单示例的链接?。直到现在我还无法映射用户数据类型...我正在考虑从 ER 模型中删除用户数据类型并分解它的组成字段。

我正在使用 Hibernate 3.5.4

在此先感谢您的支持。

最佳答案

如果这能解决问题,请告诉我。下面是 postgres/hibernate 实现 http://www.hibernatespatial.org/tutorial.html 的例子

或其他可能对这种情况有用的信息是:

我假设您已经使用实体注释声明了您的 Java 对象。创建一个扩展 Hibernate Usertype 对象的 ContactUsetype 对象。

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)")

关于java - 如何使用 Hibernate 映射用户数据类型(复合类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9707788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com