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

Java Hibernate:如何从实体构造函数参数生成Id?,java,hibernate,orm,annotations,Java,Hibernate,Orm,Annotations,如何使用构造函数参数为实体生成id-可能吗?我需要它使树结构(类别->子类别…)传递给构造函数父类别id Category category = new Category(parentId); CategoryDAO.add(category); 一个想法是使用Hibernate中的“id”“生成器”。 请参见此处的文档: 看看您的用例,“分配的”或“类”生成器似乎很合适这并不能直接回答您的问题,但是,除非我误解了您的需求,否则您实际想要的是对自引用关联进行建模,类似这样: @Entity

如何使用构造函数参数为实体生成id-可能吗?我需要它使树结构(类别->子类别…)传递给构造函数父类别id

Category category = new Category(parentId);
CategoryDAO.add(category);
一个想法是使用Hibernate中的“id”“生成器”。 请参见此处的文档:


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

这并不能直接回答您的问题,但是,除非我误解了您的需求,否则您实际想要的是对自引用关联进行建模,类似这样:

@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);
    }    
}
@实体
公共类类别{
@Id@GeneratedValue
私人长id;
私有字符串名称;
@多通(可选=真)
私人类别家长;
@OneToMany(mappedBy=“parent”,cascade=CascadeType.ALL)
私有集子类别;
// ...
公共无效添加到子类别(类别){
类别。setParent(本);
此。子类别。添加(类别);
}    
}

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