gpt4 book ai didi

java - 将 PostgreSQL ltree 类型与 Java ORM 层一起使用

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:22 25 4
gpt4 key购买 nike

我喜欢用 ltree来 self 的一个项目中的 PostgreSQL contrib,我喜欢在数据库之上使用某种 ORM 层(Hibernate、EclipseLink)。我没有发现任何关于持久使用这种类型的有用信息。我想我必须用新类型和相应的运算符扩展当前的 PostgreSQL 方言。但是我真的不知道从哪里开始以及正确的方法是什么。 ltree 的工作方式非常像一个字符串,所以我猜我应该从一个字符串表示开始。

有人可以给我建议和/或指向正在做类似事情的示例的链接吗?我还找不到完整的教程。

最佳答案

这个:

@Column(name = "dir", nullable = false, columnDefinition = "ltree")
@Type(type = "ru.zen0n.hibernate.types.LTreeType")
private String path;

还有这个:

package ru.zen0n.hibernate.types;

import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;

public class LTreeType implements UserType {

@Override
public int[] sqlTypes() {
return new int[] {Types.OTHER};
}

@SuppressWarnings("rawtypes")
@Override
public Class returnedClass() {
return String.class;
}

@Override
public boolean equals(Object x, Object y) throws HibernateException {
return x.equals(y);
}

@Override
public int hashCode(Object x) throws HibernateException {
return x.hashCode();
}

@Override
public Object nullSafeGet(ResultSet rs, String[] names, Object owner)
throws HibernateException, SQLException {
return rs.getString(names[0]);
}

@Override
public void nullSafeSet(PreparedStatement st, Object value, int index)
throws HibernateException, SQLException {
st.setObject(index, value, Types.OTHER);
}

@Override
public Object deepCopy(Object value) throws HibernateException {
return new String((String)value);
}

@Override
public boolean isMutable() {
return false;
}

@Override
public Serializable disassemble(Object value) throws HibernateException {
return (Serializable)value;
}

@Override
public Object assemble(Serializable cached, Object owner)
throws HibernateException {
return cached;
}

@Override
public Object replace(Object original, Object target, Object owner)
throws HibernateException {
// TODO Auto-generated method stub
return deepCopy(original);
}

}

关于java - 将 PostgreSQL ltree 类型与 Java ORM 层一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6030511/

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