Hibernate аннотации(каскадное удаление)

185
13 января 2018, 01:31

Есть 3 класса. Класс Гость

@Proxy(lazy = false)
@Entity
@Table(name = "guest")
public class Guest extends HotelEntity {
    @Basic
    @Column(name = "name")
    private String name;
    @Basic
    @Column(name = "surname")
    private String surname;
    @OneToMany( cascade = {CascadeType.ALL})
    private List<GuestRoomInfo> guestRoomInfoList ;
    @OneToMany( cascade = {CascadeType.ALL})
    private List<GuestServiceInfo> guestServiceInfoList ;

    public Guest( String name, String surName) {
        this.name = name;
        this.surname = surName;
    }
       public Guest(){}
GETTERS,SETTERS
}

Класс Комната

@Entity
@Table(name = "room")
public class Room extends HotelEntity implements Serializable{
    @Basic
    @Column(name = "number")
    private Integer number;
    @Basic
    @Column(name = "cost")
    private Integer cost;
    @Basic
    @Column(name = "capacity")
    private Integer capacity;
    @Basic
    @Column(name = "stars")
    private Integer stars;
    @Enumerated(EnumType.ORDINAL)
    private RoomStatus status;

    public Room (Integer number,  Integer cost, Integer capacity, Integer stars) {
        this.number = number;
        this.cost = cost;
        this.capacity = capacity;
        this.stars = stars;
        this.status=RoomStatus.FREE;
    }
    public Room(){}
    getters,setters...
}

И класс, где хранится инфа о госте и комнате

@Entity
@Table(name = "guestroominfo")
public class GuestRoomInfo extends HotelEntity {
    @OneToOne
    @JoinColumn(name="guest")
    private Guest guest;
    @OneToOne
    @JoinColumn(name="room")
    private Room room;
    public GuestRoomInfo(Guest guest, Room room, Date arrivaldate, Date departuredate, Boolean isStillLiving) {
        this.guest=guest;
        this.room=room;
    }
    public GuestRoomInfo(){}
    getters,setters...
}

Лишние методы выкинул для простоты. Не получается каскадное удаление. По идее< при удалении гостя должна удаляться и guestroominfo.

Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`hotel7`.`guestroominfo`, CONSTRAINT `FK1AD7D5E128946912` FOREIGN KEY (`guest`) REFERENCES `guest` (`id`))
Answer 1

Нужно добавить cascade = CascadeType.ALL к аннотации @OneToOne в классе guestroominfo:

@Entity
@Table(name = "guestroominfo")
public class GuestRoomInfo extends HotelEntity {
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "guest")
    private Guest guest;
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "room")
    private Room room;
    public GuestRoomInfo(Guest guest, Room room, Date arrivaldate, Date
            departuredate, Boolean isStillLiving) {
        this.guest = guest;
        this.room = room;
    }
}

и еще нужно добавить аннотацию @Cascade в классе guest:

@OneToMany(cascade = {CascadeType.ALL})
@Cascade(CascadeType.DELETE)
private List<GuestRoomInfo> guestRoomInfoList;
READ ALSO
Можно ли удалить объект в Java, на который еще есть ссылки?

Можно ли удалить объект в Java, на который еще есть ссылки?

Можно ли удалить объект, из хипа, в Java, на который еще есть ссылки? В документации не нашел, можно ли это сделать или нетМне кажется что нет

205
Подскажите как изменить SIGHASH_FORKID = 0x40, хочу сделать кошелек для BTC и BCH, но пишет Signature must use SIGHASH_FORKID

Подскажите как изменить SIGHASH_FORKID = 0x40, хочу сделать кошелек для BTC и BCH, но пишет Signature must use SIGHASH_FORKID

Не могу отправить транзакцию биткойн кеш , пожалуйста помогите

182
Как заставить Timer перейти к следующем тику?

Как заставить Timer перейти к следующем тику?

Условно, таймер работает с задержкой 5 секунд: Как описать событие, происходящее в середине ожидания, чтобы ожидание заканчивалось и сразу...

244
Как найти высоту контейнера в JavaFX?

Как найти высоту контейнера в JavaFX?

Как найти высоту контейнера anchorPane 2 или от начала Stage и до anchorPane 2 (включительно), если нам был передан в метод только ComboBox? На картине я описал...

163