【问题标题】:Hibernate foreign key mapping to value (not entity)?休眠外键映射到值(不是实体)?
【发布时间】:2013-01-14 20:21:32
【问题描述】:

我有两个表:主表 Order 和另一个表 Status。订单有一个外键 status_id。状态是以下字符串的表:“完成”、“传输中”或“待处理”。我是否正确地说,我通常会实现两个实体 Order 和 Status,其中 Order 实体具有外键的多对一映射?我认为这将是多对一映射的原因是因为每个订单只有一个状态,但状态值显然会被重用(例如,一堆不同的订单可能具有“运输中”的状态)。

不过,我还有一个问题。由于“状态”表将是一个只有一个字符串列并且只有 3 行的简单表,有没有更简单的方法在 Hibernate 中实现它?它实际上必须是一个实体还是我可以使用一些基于价值的映射?

另外,请制作基于 (XML) 的任何示例映射...我使用的是休眠映射文件,而不是注释或其他任何东西。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    如果您的状态表只是字符串,我建议您将 status_id 折叠到订单表中的字符列,并使用 Enum 对各种状态进行编码。您可以添加一个额外的 getter 方法来返回 Enum 而不是状态。在您的枚举类中,您可以拥有描述性字符串,并且可以将它们作为名词、动词等。

    这是我在 Eclipse 中为此目的使用的示例枚举模板:

    public enum Status {
    
    COMPLETE("complete"),
    IN_TRANSIT("In transit"); // You can add others here.
    
    private String _id;
    
    
    private Status(String id) {
        _id = id;
    }
    
    private static Map<String, Status> _enumById = new HashMap<String, Status>();
    
        static {
            for (${enclosing_type} type : values()) {
                 _enumById.put(type.getId(), type);
            }
        }
    
    
        public String getId() {
            return _id;
        }
    
    
        public static Status findById(String id) {
            return _enumById.get(id);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2019-12-03
      • 2020-12-18
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多