Hibernate:如何从实体构造函数参数生成Id?

时间:2010-10-21 07:06:21

标签: java hibernate orm annotations

如何使用构造函数参数为实体生成id - 这可能吗?我需要将树结构(category - > subcategories ...)传递给构造函数父类别id。

Category category = new Category(parentId);
CategoryDAO.add(category);

2 个答案:

答案 0 :(得分:0)

一个想法是使用来自Hibernate的“id”“generator”。 请参阅此处的文档:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-id

查看您的用例,“已分配”或“类”生成器似乎是合适的

答案 1 :(得分:0)

这并没有直接回答你的问题,但是,除非我误解了你的要求,你真正想要的是建立一个自引用关联模型,如下所示:

@Entity 
public class Category {
    @Id @GeneratedValue
    private Long id;

    private String name;

    @ManyToOne(optional=true)
    private Category parent;

    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
    private Set<Categories> subCategories;

    // ...

    public void addToSubCategories(Category category) {
        category.setParent(this);
        this.subCategories.add(category);
    }    
}

如果这不是你想要的,如果你不想使用生成的标识符,那么就不要使用@GeneratedValue注释并手动分配标识符(在构造函数中,使用setter什么的)。但我不明白为什么你需要这个。