当前位置: 首页 > 知识库问答 >
问题:

Hibernate,如何获得注册的自定义类型

燕鸿波
2023-03-14

显然,可以创建一个TypeDef来根据方言切换实现。

package org.hibernate.type;

import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import org.hibernate.type.descriptor.java.UUIDTypeDescriptor;
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
import org.hibernate.type.descriptor.sql.VarcharTypeDescriptor;

import java.io.IOException;
import java.util.Properties;

public class UUIDCustomType extends AbstractSingleColumnStandardBasicType {

private static final long serialVersionUID = 902830399800029445L;

private static final SqlTypeDescriptor  SQL_DESCRIPTOR;
private static final JavaTypeDescriptor TYPE_DESCRIPTOR;

static {
    Properties properties = new Properties();
    try {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        properties.load( loader.getResourceAsStream( "database.properties" ) );
    }
    catch ( IOException e ) {
        throw new RuntimeException( "Could not load properties!", e );
    }

    String dialect = properties.getProperty( "dialect" );
    if ( dialect.equals( "org.hibernate.dialect.PostgreSQLDialect" ) ) {
        SQL_DESCRIPTOR = PostgresUUIDType.PostgresUUIDSqlTypeDescriptor.INSTANCE;
    } else if(dialect.equals("org.hibernate.dialect.H2Dialect")) {
        SQL_DESCRIPTOR = VarcharTypeDescriptor.INSTANCE;
    } else {
        throw new UnsupportedOperationException("Unsupported database!");
    }

    TYPE_DESCRIPTOR = UUIDTypeDescriptor.INSTANCE;
}

public UUIDCustomType() {
    super(SQL_DESCRIPTOR, TYPE_DESCRIPTOR);
}

@Override
public String getName() {
    return "uuid-custom";
}

}

我的问题是hibernate似乎没有识别它,值得注意的是,有一次我将“uuid-custom”作为类型中的静态字符串,并直接在@type中引用它,所以它并不是实际上不在类路径上。

共有1个答案

咸亦
2023-03-14

我不确定是否有其他方法可以让它工作,但是将它添加到包中的typedef中-info.java可以解决这个问题

@TypeDef(
    name = UUIDCustomType.UUID,
    defaultForType = UUID.class,
    typeClass = UUIDCustomType.class
)
package com.xenoterracide.rpf.model;

import org.hibernate.annotations.TypeDef;
import org.hibernate.type.UUIDCustomType;

import java.util.UUID;
 类似资料:
  • 问题内容: 我想在定义类时注册一个类的实例。理想情况下,以下代码可以解决问题。 不幸的是,此代码生成错误。 发生的事情是在我尝试实例化a的行上,但装饰器尚未返回,因此它不存在。 是否使用元类解决了这个问题? 问题答案: 是的,元类可以做到这一点。元类的方法返回该类,因此只需在返回之前注册该类。 前面的示例在Python 2.x中有效。在Python 3.x中,的定义略有不同(虽然未更改,但未显示-

  • 我想注册一个Avro模式,它在模式注册表上引用另一个Avro模式。 首先,我注册了以下基本Avro模式: 如果我尝试注册以下Avro架构,该架构引用“客户端”属性中的基本架构,则操作失败并出现错误422 这个问题似乎与指定自定义类型字段有关。 任何想法如何添加自定义类型,同时注册相关的模式在模式注册表?

  • 本文向大家介绍WordPress 注册自定义帖子类型,包括了WordPress 注册自定义帖子类型的使用技巧和注意事项,需要的朋友参考一下 示例 假设您有一个图书馆网站,并且想要一个名为Books的自定义帖子类型。可以注册为 如此简单,您现在就注册了一个自定义帖子类型。 该代码段可以放在主题functions.php文件中,也可以放在插件结构中。

  • 所以很明显,添加类型转换器还有其他方式,我通过显式配置转换服务来搞砸了?有没有一种方法可以注册自定义类型转换器而不踩到其他转换器?

  • 我是新来的Laravel。我有两种不同的用户类型:老师和学生。教师在网站注册表格中注册账户,但学生注册由windows应用程序提供。所以我必须为这个应用程序提供一个API。默认Laravel认证是足够的教师注册,但我可以使用相同的AuthController API注册?我不需要视图或重定向到网站。

  • 我已经为log4j2编写了一个自定义触发策略,该策略将被回滚。在每小时/天/你的工作时间间隔结束时,按照本SO帖子的建议记录文件。 虽然我遵循基于时间的触发策略约定(命名等),但我无法看到我的策略被实例化和使用。 解决方案由3个java文件和一个maven文件组成,可在github上获得 在这里,您可以从政策本身找到主要内容: log4j2。xml文件: 编辑: 在调试过程中,我了解到在log4j