Расширение таблицы в Hibernate, которая имеет некоторые отношения - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть объект, который хотел бы расширить его, добавив несколько полей.Прежде всего, они не доступны для непосредственного изменения, они находятся в своем собственном JAR-файле.Вот базовые сущности:

@Entity
table(name="ACCOUNTDEF")
public class EtAccountDef

{
private String cNumber;
private List<EtAccount> accounts = new ArrayList();

public String getCNumber()
{
  return cNumber;
}

public void setCNumber(String cNumber) {
  this.cNumber = cNumber;
}

@OneToMany(fetch=FetchType.LAZY, cascade={javax.persistence.CascadeType.ALL}, mappedBy="accountDef")
public List<EtAccount> getAccounts() {
  return accounts;
}

public void setAccounts(List<EtAccount> accounts) {
  this.accounts = accounts;
}
}

, который является родительским классом, а ниже - дочерним классом:

 @Entity
 @Table(name="ACCOUNT")
 public class EtAccount
 {
   private Double accountAmount;
   private EtAccountDef accountDef;
   private List<EtAccountItems> accountItems = new ArrayList();

    @ManyToOne(fetch=FetchType.LAZY)
   public EtAccountDef getAccountDef() {
     return accountDef;
   }

   public void setAccountDef(EtAccountDef accountDef) {
     this.accountDef = accountDef;
   }

   @OneToMany(fetch=FetchType.LAZY, cascade={javax.persistence.CascadeType.ALL}, mappedBy="account")
   public List<EtAccountItems> getAccountItems() {
     return accountItems;
   }

   public void setAccountItems(List<EtAccountItems> accountItems) {
     this.accountItems = accountItems;
   }
 }

, поэтому я попробовал эти изменения для достижения своей цели.

@MappedSuperclass
public abstract class OtAbstractAccount extends EtAccount {
    private Double AccountCommission;

    @Column(columnDefinition="decimal(15,2)")
    public Double getAccountCommission() {
        return accountCommission;
    }
    public void setAccountCommission(Double accountCommission) {
        this.accountCommission = accountCommission;
    }

и затем расширить его на эту сущность:

@Entity
@Table(name="ACCOUNT")
public class OtCostumAccount extends OtAbstractAccount {
}

Поля теперь добавляются в базовую таблицу (EtAccount), но после компиляции я получаю сообщение об ошибке в Weblogic, которое говорит:

Причина: org.hibernate.AnnotationException: @OneToOne или @ManyToOne в EtAccount.accountDef ссылаются на неизвестную сущность: EtAccountDef

Я ввел эти две строки вмой файл ORM:

 <mapped-superclass class="package.OtAbstractAccount" /> 
 <entity class="package.OtCostumAccount" />

Удивительно, но когда я комментирую

 <mapped-superclass class="package.OtAbstractAccount" /> 

от ORM, weblogic не выдает никакой ошибки, но когда я пытаюсь загрузить объект, создается другая ошибка, которая говорит:

Причина: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: ORA-00904: «OtCostumAccount». «DTYPE»: неверный идентификатор

IЯ запутался в этих ошибках, и я буду признателен за любую помощь.

1 Ответ

0 голосов
/ 03 февраля 2019

Если вы не можете изменить родительский класс, то применяется стратегия наследования по умолчанию в спящем режиме: одна таблица на класс.Эта стратегия требует столбца дискриминанта, который по умолчанию является DTYPE.Вы пытались добавить столбец дискриминатора к вашей сущности OtCostumAccount или создать столбец DTYPE?

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