ошибка конструктора метания в спящем режиме, несколько полей - PullRequest
0 голосов
/ 10 октября 2018

Я изменил некоторый рабочий код в классе под названием Alignment, чтобы включить 4-й столбец.Выравнивание используется в списке другим классом, поэтому выравнивание определяется как @embedded.В классе using столбцы определяются с помощью AttributeOverrides.

Огорчает то, что он работает в исходном состоянии с 3 столбцами.Я добавил четвертый столбец «origin» и получаю эту ошибку при создании списка:

     demo.admin Fluence 0:0:0:0:0:0:0:1 /ia/secure/assignment/list.action] [36mo.h.engine.jdbc.spi.SqlExceptionHelper
[0;39m : Unknown column 'alignments0_.origin' in 'field list'

10-Oct-2018 14:40:27.571 SEVERE [tomcat-http--3] org.apache.catalina.core.ApplicationDispatcher.invoke Servlet.service() for servlet [jsp] threw exception
 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'alignments0_.origin' in 'field list'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

Список, который использует Alignment, определяется как:

@ElementCollection(fetch = FetchType.EAGER)
@OrderColumn(name = "order_index")
@CollectionTable(
  name = "alignment",
  joinColumns = @JoinColumn(name = "item_id", 
   nullable = false))
@AttributeOverrides({
  @AttributeOverride(name = "guid", column = @Column(name = "guid")),
  @AttributeOverride(name = "setName", column = @Column(name = "set_name")),
  @AttributeOverride(name = "subject", column = @Column(name = "subject")),
  @AttributeOverride(name = "origin", column = @Column(name = "origin"))
 })
@Cache(usage = 
CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public List<Alignment> getAlignments() {
  return this.alignments;
}

Конструкторы выравнивания:

@Embeddable
public class Alignment implements Serializable {

public static String MANUAL = "manual";
public static String AUTO = "auto";

public Alignment() {  }

public Alignment(Standard standard) {
  this.guid = standard.getGuid();
  this.setName = standard.getStandardSet();
  this.subject = standard.getSubjectArea();
  this.origin = AUTO;
}

public Alignment(String guid, String setName, 
  SubjectArea subject) {
  this.guid = guid;
  this.setName = setName;
  this.subject = subject;
  this.origin = AUTO;
}

public Alignment(String guid, String setName, 
  SubjectArea subject, String origin) {
  this.guid = guid;
  this.setName = setName;
  this.subject = subject;
  this.origin = origin;
}

Очень печально, так как конструктор из 3 элементов работал нормально, а конструктор из 4 элементов - нет.Метод выбора, который извлекает данные, не ссылается на эту таблицу, поскольку это встроенный класс для выравнивания на основе определенных выше атрибутов гибернации.

Выбор не был изменен, а источник добавлен в таблицу выравнивания как varchar (10).

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 16 октября 2018

Так что это была не спящая проблема вообще.Класс Alignment был встроен в несколько классов по всей системе, и они указывали на несколько разных таблиц.Добавьте столбец происхождения в эти таблицы и вуаля!все отлично работает

Теперь решим, хороший это дизайн или нет.

Кто-нибудь знает, есть ли у hibenate переопределение, чтобы НЕ использовать столбец в классе при получении?

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