当前位置: 首页 > 面试题库 >

在不同情况下使用不同的休眠用户类型

淳于宏伯
2023-03-14
问题内容

我正在使用Hibernate + JPA作为我的ORM解决方案。

我正在使用HSQL进行单元测试,并使用PostgreSQL作为真正的数据库。

我希望能够将Postgres的本机UUID类型与Hibernate一起使用,并在其String表示形式中将UUID与HSQL一起用于单元测试(因为HSQL没有UUID类型)。

我正在为Postgres和HSQL单元测试使用具有不同配置的持久性XML。

这是我让Hibernate“看到”我的自定义UserType的方法

@Id
@Column(name="UUID", length=36)
@org.hibernate.annotations.Type(type="com.xxx.UUIDStringType")
public UUID getUUID() {
    return uuid;
}


public void setUUID(UUID uuid) {
    this.uuid = uuid;
}

而且效果很好。但是我需要的是能够以XML形式或从无需重新编译即可更改的属性文件中交换注释的“ com.xxx.UUIDStringType”部分的功能。

有任何想法吗?


问题答案:

这个问题确实很老了,已经回答了很长时间,但是最近我也遇到了同样的情况,并且找到了一个很好的解决方案。首先,我发现Hibernate具有三种不同的内置UUID类型实现:

  1. binary-uuid :将UUID存储为二进制
  2. uuid-char :将UUID存储为字符序列
  3. pg-uuid :使用本地Postgres UUID类型

这些类型默认情况下已注册,并且可以为带@Type注释的给定字段指定,例如

@Column
@Type(type = "pg-uuid")
private UUID myUuidField;

还有 也是 在覆盖默认类型的机制Dialect。因此,如果最终的部署是与Postgres数据库进行通信,但是单元测试使用HSQL,则可以pg- uuid通过编写自定义方言来覆盖类型以读取/写入字符数据,如下所示:

public class CustomHSQLDialect extends HSQLDialect {

    public CustomHSQLDialect() {
        super();

        // overrides the default implementation of "pg-uuid" to replace it
        // with varchar-based storage.
        addTypeOverride(new UUIDCharType() {
            @Override
            public String getName() {
                return "pg-uuid";
            }
        });
    }
}

现在,只需插入自定义方言,该pg-uuid类型就可以在两种环境中使用。



 类似资料:
  • 本文向大家介绍boosting和bagging在不同情况下的选用相关面试题,主要包含被问及boosting和bagging在不同情况下的选用时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Bagging与Boosting的区别: 1)取样方式(样本权重):Bagging是均匀选取,样本的权重相等,Boosting根据错误率取样,错误率越大则权重越大。2)训练集的选择:Bagging随机选择

  • 任何建议什么将是实施这种行为的最佳方式。 谢谢Bsengar

  • 我试图使用一个类型族来生成依赖于某个类型级别自然数的约束。下面是这样一个函数: 然后我有一个函数,它有这个约束。 当我试图在模式匹配中使用这个函数时,我的类型族应该产生这个约束,ghc说它不能推导出约束 下面是一个例子: 它会产生错误

  • 问题内容: 嗨,我想使用条件编写查询:必须使用条件创建以下查询: “从S2中选择不同的(s2Taxper),其中s2Tc =‘601’并且s2Txcd!=” 提前致谢 问题答案:

  • 尝试使用Request.GetParameter但结果检索到第一个值,即第一个索引: 将名称取为“MyArray[]”,并在下一页使用 访问该值` 现在我应该做什么,有没有替代方法或者要在这里做一些更改: 这是page One.jsp中的表单: 下面是代码片段: 注意:忽略计数器值,因为这里只是为了检查,代码运行正常,但它只使用Request.GetParameter检索第一个索引值。 请给我一些

  • 问题内容: 我有一个关于乐观锁定Hibernate的问题。我试图深入了解Hibernate的乐观锁定,但是我有一个疑问。Hibernate使用版本方法(整数或时间戳)来实现乐观锁定。要进行配置,您可以使用@Version批注(或xml配置)并创建一个version属性。另一个选项是使用optimistic- lock =“ all”属性进行配置而不进行版本控制。 我的问题是,如果您没有定义任何版本