Использование Hibernate для удаления издателя без книг - PullRequest
0 голосов
/ 20 июля 2011

при написании приложения для книжного магазина мне нужно было поместить сопоставления для классов Book и Publisher.

Книга имеет отношение n-к-1 с Publisher. Также n-к-1 с Author.Я хотел предоставить пользователю с правами администратора возможность удалять книги, авторов или издателей.

Издатель без книг не имеет смысла. Аналогично для Автора. Если все книги издателя удалены, издательдолжны быть удалены из БД.Если все Книги автора будут удалены, Автор также должен быть удален.Это звучит как каскад удаления-сироты. Но отображение много-к-одному не поддерживает удаление-сироту.

Кроме того, если я удаляю издателя, все его книги должны быть удалены.Точно так же удаление автора должно удалить все его книги.

В настоящее время у меня есть классы Автор, Издатель и Книга, определенные ниже: Книга имеет поля Автор и Издатель. Но Автор или Издатель не имеет ссылки наих книги.Должен ли я переопределить эти классы?Как я должен сопоставить отношения между Книгой и Издателем?

Любая помощь приветствуется

public class Book {
    private Long bookId;    
    private Author author;
    private Publisher publisher;
...
}

public class Publisher {
    private Long publisherId;   
    private String name;        
}

public class Author {
    private Long authorId;
    private String name;    
}

<class name="Book" table="BOOKS">
    <id name="bookId" column="BOOKID" type="long">
    <generator class="native"/>
    </id>
    ...
    <many-to-one name="publisher" class="Publisher"   column="PUBLISHERID" lazy="false" cascade="save-update"/>
  ...

1 Ответ

1 голос
/ 20 июля 2011

Вам необходимо отобразить коллекцию (<x-to-many>) и установить ее на cascade=all.Это означает, что при удалении владельца коллекции элементы коллекции также удаляются.

Обратите внимание, что у вас также есть возможность использовать аннотации вместо xml.Это будет @OneToMany(cascade=CascadeType.ALL)

...