java - Hibernate:在没有表的情况下按字段加载类

标签 java hibernate jpa orm

我有一个Ink具有一组固定常量的类。它们永远不会改变,我不想将此类存储为表格。

public final class Ink {
    public static final Ink Y = new Ink(91001, 'y', 90.70,  -5.23,  94.37), "Yellow");
    public static final Ink M = new Ink(92001, 'm', 48.19,  72.01,  -1.78), "Magenta");
    public static final Ink C = new Ink(93001, 'c', 56.46, -41.00, -43.50), "Cyan");
    public static final Ink K = new Ink(94001, 'k', 18.64,   1.80,   5.21), "Black");      

    public int code;

    public static Ink forCode(int code) {
        //...
    }

    //...
}

其他类可以有Ink inkCollection<Ink> inks字段,但每个 ink实例必须映射为简单整数列,其 code仅值。 Code不是外键或其他东西——它是一个简单的整数值,我总是可以从中获取 Ink实例。

@Entity
public class Order {
     //...
     @OneToMany    
     public Set<Ink> inks;
     //...
}

我可以使用转换器来恢复Ink按其类别 code然后返回

@Converter(autoApply = true)
public class InkConverter implements AttributeConverter<Ink, Integer> {

     @Overrcodee
     public Integer convertToDatabaseColumn(Ink ink) {
         return ink.code;
     }

     @Overrcodee
     public Ink convertToEntityAttribute(Integer code) {
         return Ink.forCode(code);
     }
}

但问题是:

如何防止 Hibernate 将类映射为表,并且仍然从其 code 加载类字段列?

最佳答案

当您将墨迹存储在 Java 代码中时。所以你应该自己实现加载操作。首先,您可以通过注释 @Transient 来阻止 Hibernate 将类映射为表。然后您可以在订单加载后处理加载操作:

public interface Inked {
    getCode();
    setInk(Ink ink);
}

public abstract class AbstractEntity {

    @PostLoad
    public void loadInk() {
        if(this instanceof Inked){
            Inked inked = (Inked) this;
            inked.setInk(Ink.forCode(getCode()));
        }
    }
}

@Entity
public class Order extends AbstractEntity implement Inked {
    //...
    public Integer code;

    @Transient
    public Ink ink;
    //...

}

关于java - Hibernate:在没有表的情况下按字段加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36514373/

相关文章:

java - CrudRepository 保存方法不返回更新后的实体

Java,单个数据库列多次引用

java - com.abc.serive.MysqlService 中的字段 countRepo 需要类型为 'com.abc.repository.ClicksQuickReplyRepository' 的 bean,但无法找到

java - 正则表达式匹配 "test"而不是 "test-1"

java - 方法完成后立即提交事务

java - 使用 Spring JPA 的单向多对多映射

java - 使用 Iterator 时出现 ConcurrentModificationException

java - Rest Web 服务 - 对象映射器

java - Hibernate 一对多无法初始化集合

java - 带有数字和下一个、上一个的 Jpa 分页