Один ко многим каскадно все - спасите детей и иждивенцев - PullRequest
0 голосов
/ 10 июля 2020

У меня есть 3 объекта, как показано ниже:

@Entity
@Table(name = "person", schema = "test")
public class Person implements Persistable 
{
     @Id
     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "***")
     @SequenceGenerator(name = "***", sequenceName = "***" , schema = "test")
     @Column(name = "person_id")
     private int personId;

     @OneToOne(mappedBy = "personById", cascade = CascadeType.ALL, orphanRemoval = true)
     private Address address;
}

@Entity
@Table(***)
class Address
{
    @Id
    private int personId;
    Person personById;
    String countryCode;
    List<AddressUse> addressById;
    
    @OneToOne
    @MapsId
    @JoinColumn(name = "person_id", nullable = false)
    public Person getPersonById() {
        return personById;
    }
    
    @OneToMany(mappedBy = "addressById" , cascade = CascadeType.ALL)
    public Collection<AddressUse> getAddressById() {
        return addressById;
    }
}

@Entity
@Table(***)
class AddressUse
{
    @Id
    private int personId;
    @Id  
    String use;
    Date modifyTimestamp;
    String updateBy;
    Address addressById;
    
    @ManyToOne
    @JoinColumn(name = "person_id", nullable = false , insertable = false, updatable = false)
    public Address getAddressById() {
        return addressById;
    }
}

Когда я пытаюсь сохранить Person с автоматически сгенерированным идентификатором, вставка Person и Address происходит правильно, но вставка AddressUse не работает, говоря, что Address не имеет поля personId . Если ключ не сгенерирован автоматически, и я передаю его вручную, все работает хорошо, но с автоматически сгенерированным идентификатором каскад не работает.

Я установил Address в AddressUse и наоборот, я установил Person в Address и Vice наоборот.

Ошибка в ответе:

Ключ (person_id) = (0) отсутствует в таблице «Адрес» Ошибка во время управляемого гриппа sh [org.hibernate.exception. ConstraintViolationException: не удалось выполнить пакет] вставить в db.test.address_use

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...