Hibernate外键映射到值(不是实体)?

时间:2013-01-14 20:21:33

标签: hibernate

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

但是,我还有一个问题。由于“Status”表将是一个只包含一个String列的简单表,并且只有3行,是否有更简单的方法在Hibernate中实现它?它实际上必须是一个实体还是我可以使用一些基于值的映射?

另外,请根据(XML)制作任何基于映射的示例...我使用的是hibernate映射文件,而不是注释或其他任何内容。

1 个答案:

答案 0 :(得分:0)

如果您的状态表只是字符串,我建议您将status_id折叠到订单表中的字符列,并使用枚举对各种状态进行编码。您可以添加额外的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);
    }
}