Hibernate: Как генерировать Id из параметров конструктора сущностей? - PullRequest
0 голосов
/ 21 октября 2010

Как сгенерировать id для сущности, используя параметры конструктора - это возможно? Мне нужно, чтобы древовидная структура (категория -> подкатегории ...) передавалась идентификатору родительской категории конструктора.

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

Ответы [ 2 ]

0 голосов
/ 21 октября 2010

Это не дает прямого ответа на ваш вопрос, но, если я не неправильно понял ваши требования, вы на самом деле хотите смоделировать ассоциативную ссылку, примерно такую:

@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 и присвойте идентификатор вручную (в конструкторе, используя установщик, что угодно ). Но я не понимаю, зачем тебе это нужно.

0 голосов
/ 21 октября 2010

Одной из идей было бы использование «id» «генераторов» из Hibernate.См. Документы здесь: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-id

С учетом вашего варианта использования генераторы "назначенного" или "класса" подходят

...