【问题标题】:JPA Map User Types with Wrapper ClassesJPA 使用包装类映射用户类型
【发布时间】:2014-12-07 17:23:17
【问题描述】:

如何映射和更改实际包装类的字段。

private UserId uid = new UserId();

UserId 是一个包含在许多类中的类。它将字符串作为 Id 但它在数据库中的等效字段很长

当我注释它时,JPA 抱怨字段的类型和可访问性。

我需要告诉 JPA 使用注释

  1. 如何访问最终将被映射的实际字段

  2. 明明不知道怎么把string转成long,怎么办?

我是 JPA 和 Java 的新手,并且在字段上使用注释。

谢谢

这里是代码

UserId.java

public class UserId extends CustomString {
public UserId(String value) {
    super(value);
}

CustomString.java

public abstract class CustomString extends ParentDomain {

private String value;

public CustomString(String value) {
    if (value == null) {
        throw new NullStringException(this.getClass().getName());
    }
    this.value = value;
}
//Getters and Setters
@Override
public String toString() {
    return this.value;
}

}

ParentDomain.java

public abstract class ParentDomain {
// nothing

}

到目前为止我做了什么

从 Long 转换为字符串后,我创建了返回类型为 Long 返回值的 getter setter。

【问题讨论】:

  • 我们需要看更多我认为的代码,比如 UserId 类是什么样子的?
  • JPA 提供 AttributeConverter,因此您可以映射任何类型。那么使用它有什么问题呢?
  • @NeilStockton 感谢您的评论。我会尝试创建一个。我不知道这样的事情。
  • @omega_cancer 请注意,它仅存在于 JPA 2.1 中,因此请检查您使用的是哪个

标签: java hibernate jpa jpa-2.0


【解决方案1】:

您可以编写一个Hibernate UserType,它接受 UserId 对象并将其映射到一个 LONG 列。

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 2011-02-19
    • 2013-12-31
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多