0

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

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

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

4

1 回答 1

0

如果您的状态表只是字符串,我建议您将 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);
    }
}
于 2013-01-14T21:15:20.673 回答