сохранение данных с использованием аннотации Hibernate - PullRequest
1 голос
/ 23 января 2012

Я совершенно новичок в спящем режиме.

У меня есть следующие таблицы:

Контракт

ContractID (PK), Другие столбцы

Provider
ProviderID (PK), другие столбцы

ContractualAgreement ContractualAgreementID (PK), ContractID (FK), ProviderID (FK),Другие столбцы

Я использую следующие спящие аннотации:

 **Contract.java**

    {

    private List<ContractualAgreement> contractualAgreements = new ArrayList<ContractualAgreement>();

    @OneToMany(cascade= { javax.persistence.CascadeType.ALL },fetch= FetchType.LAZY)
    @JoinColumn (name="ContractID", updatable=false,insertable=false)
    public List<ContractualAgreement> getContractualAgreements() {
            return this.contractualAgreements;
        }
    }

 **Provider.java**
{
    private List<ContractualAgreement> contractualAgreements = new     ArrayList<ContractualAgreement>();

    @OneToMany(cascade= { javax.persistence.CascadeType.ALL },fetch= FetchType.LAZY)
    @JoinColumn (name="ProviderID", updatable=false,insertable=false,nullable=false)
    public List<ContractualAgreement> getContractualAgreements() {
            return this.contractualAgreements;
        }
    }
}

 **ContractualAgreement.java**
{
    @Id
    @Column(name = "ContractualAgreementID", unique = true, nullable = false)
    public long getContractualAgreementId() {
        return this.contractualAgreementId;
    }

    public void setContractualAgreementId(long contractualAgreementId) {
        this.contractualAgreementId = contractualAgreementId;
    }

    @ManyToOne(fetch= FetchType.LAZY)
    @JoinColumn(name = "ProviderID",updatable=false,insertable=false,nullable=false)
    public Provider getProvider() {
        return this.provider;
    }

    public void setProvider(Provider provider) {
        this.provider = provider;
    }

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="ContractID",updatable=false,insertable=false,nullable=false)
    public Contract getContract() {
        return this.contract;
    }
}

Я заполняю данные в следующем порядке:

  1. объект контракта на объекте договорного соглашения.
  2. список договорных соглашений на провайдера.

, и я пытаюсь сохранить провайдера с помощью saveOrUpdate.

Теперь он сохраняет данные в провайдере, таблице договорных соглашений с правильным Provrid в договорном согласии.таблицы, но не сохраняет данные в таблице контрактов.

Кто-нибудь может указать, что я делаю неправильно?

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

1 Ответ

0 голосов
/ 23 января 2012

Вы делаете много вещей неправильно.

Сначала;таблица договорных соглашений - это просто таблица соединений.Он не имеет никакого другого функционального столбца и, таким образом, используется для материализации связи между контрактом и поставщиком.Таким образом, эта таблица должна

  • не иметь идентификатора
  • , иметь составной PK, содержащий два FK
  • , которые не должны отображаться как объект

У вас должна быть связь ManyToMany между Контрактом и Поставщиком.Ассоциация ManyToMany будет отображаться с использованием таблицы ContractualAgreement.

Другие проблемы в вашем коде:

  • вы помечаете все как insertable = false, updateable = false.Если ничто не может быть вставляемым или обновляемым, как будут заполняться эти столбцы?
  • Двунаправленная ассоциация OneToMany должна иметь много сторон, сопоставленных с JoinColumn.Другая сторона должна просто сказать: «эта связь уже сопоставлена ​​на другой стороне», используя OneToMany(mappedBy = "thePropertyOnTheOtherSide").

Все это хорошо описано в справочном руководстве по Hibernate. Прочтите .

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