Я работаю над существующей базой данных и создал объекты Hibernate. Проблематичным объектом является OrderHeader
, в котором есть список OrderLine
. Вот мое картографирование:Hibernate не обновляет и не удаляет, но вставляет
@Entity
@Table(name = "orderline")
public class OrderLine implements Serializable {
@Id
@Column(name = "OrderLineID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer orderLineID;
@ManyToOne
@NotNull
OrderHeader orderHeader;
}
...
@Entity
@Table(name = "orderheader")
public class OrderHeader implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "OrderHeaderID")
int orderHeaderId;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
List<OrderLine> orderLineList;
}
Все операции выполняются на отдельных объектах. Когда я использую session.save
, чтобы вставить новый OrderHeader
со списком OrderLine
все отлично. Однако при вызове session.update
на отдельном измененном OrderHeader
единственным исполняемым оператором SQL является оператор выбора, получающий результат обновления (что не произошло в первую очередь). Это становится еще хуже, когда я пытаюсь удалить OrderHeader
- несмотря на то, что он установил CascadeType.ALL
и orphanRemoval = true
на соединение при вызове session.delete
hibernate обновляет OrderLine
s в списке, установив OrderHeaderID
как null, что вызывает исключение.
DDL для обеих таблиц содержит только простые определения данных с помощью простого простого первичного ключа. Каждая операция DAO выполняется в недействительном сеансе.
Может быть, я что-то упустил? Аннотации отношений выглядят нормально, я уверен, что использую правильные методы для доступа к базе данных (хотя я пробовал все там). У меня буквально закончились варианты. Любые советы приветствуются, спасибо
EDIT: Обновление определения, теперь я получаю ERROR org.hibernate.util.JDBCExceptionReporter - Table 'dbname.orderheader_orderline' doesn't exist
Хорошо, я оставил только '@ ManyToOne' аннотацию на' стороне OrderLine' и ЛЕФ t '@OneToMany (fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)' на стороне 'OrderHeader', но теперь я получаю JDBCException при удалении - таблица 'dbname.orderheader_orderline' не существует – Ghostli
вы добавить, что MappedBy значение? ... можете ли вы снова отправить исправленный код? – Pras
опубликовал обновленную версию, должен ли mappedBy ссылаться на имя класса или таблицы? – Ghostli