У меня есть две таблицы: пациент и назначение.
Пациент может иметь много приемов. Когда я иду, чтобы удалить пациента из спящего режима таблицы пациентов, я говорю, что таблица назначений не существует.
Любая помощь будет оценена.
Настройка отношений в классе пациента
targetEntity = Appointment.class,
cascade = CascadeType.ALL,
orphanRemoval = true
)
private Set<Appointment> appointmentset = new HashSet<Appointment>();
Отношение много к одному в классе пациентов
@ManyToOne
@JoinColumn(name = "Patient_Id")
private Patient patient;
Удалить метод пациента
public void deletePatient2(Integer id){
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
TypedQuery query = session.getNamedQuery("deletePatient");
query.setParameter("id", id);
query.executeUpdate();
}catch (HibernateException e){
e.printStackTrace();
if (tx != null) tx.rollback();
}
session.flush();
tx.commit();
}
Удалить именованный запрос пациента
@NamedQuery(
name = "deletePatient",
query = "delete from Patient p where p.id = :id"
)
May 05, 2019 10:13:07 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1146, SQLState: 42S02
May 05, 2019 10:13:07 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Table 'KYMb02vi2Z.Patient_Appointment' doesn't exist
org.hibernate.exception.SQLGrammarException: could not execute statement
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178)
at org.hibernate.hql.internal.ast.exec.BasicExecutor.doExecute(BasicExecutor.java:100)
at org.hibernate.hql.internal.ast.exec.DeleteExecutor.execute(DeleteExecutor.java:105)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:454)
at org.hibernate.engine.query.spi.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:382)
at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1562)
at org.hibernate.query.internal.AbstractProducedQuery.doExecuteUpdate(AbstractProducedQuery.java:1641)
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1618)
at SessionManager.deletePatient2(SessionManager.java:1393)
Ошибка стека. Таблица в классе встреч назначается для того, чтобы называться встречей
@Entity
@Table(name = "Appointment")
public class Appointment
Но по какой-то причине он ищет таблицу с именем Patient_Appointment, даже когда я переименовываю таблицу, она все еще выдает ошибки и просто добавляет еще одного Patient_ в начале
Переназначено OneToMany в классе пациента
@OneToMany(
targetEntity = Appointment.class,
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Appointment> appointments = new ArrayList<Appointment>();
public void addAppointment(Appointment appointment){
appointments.add(appointment);
appointment.setPatient(this);
}
public void removeAppointment(Appointment appointment){
appointments.remove(appointment);
appointment.setPatient(null);
}
Раствор
@OneToMany(
mappedBy = "patient",
targetEntity = Appointment.class,
cascade = CascadeType.ALL,
orphanRemoval = true
)
Добавлен mappedBy