Я использую исключение ниже всякий раз, когда я использую сущность, которую я определил.org.hibernate.exception.SQLGrammarException: Недопустимое имя столбца
org.hibernate.exception.SQLGrammarException: Invalid column name 'coordinator_sycs_coord_id'.
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
Я буду публиковать нижестоящие объекты и запрос, который генерирует Hibernate. Контекст - это два объекта, которые имеют отношение «многие ко многим» в таблице ассоциаций. Мне интересно, что запрос, который генерирует Hibernate, меняет имя столбца, даже если у меня есть это в моих аннотациях. Смотрите ниже:
@Entity
@Table(name = "sycs_coord")
public class SycsCoordinator {
@Id
@GeneratedValue
@Column(name = "sycs_coord_id")
Long id;
@OneToMany(mappedBy = "club", fetch = FetchType.LAZY)
Set<SycsCoordinatorClub> clubs;
//Standard setters and getters below
}
@Entity
@Table(name = "sycs_coord_clb")
@IdClass(SycsCoordinatorClubPk.class)
public class SycsCoordinatorClub {
@Id
@Column(name = "sycs_coord_id")
Long sycs_coord_id;
@Id
@Column(name = "clb_id")
String clb_id;
@ManyToOne
@PrimaryKeyJoinColumn(name = "sycs_coord_id", referencedColumnName="sycs_coord_id")
SycsCoordinator coordinator;
@ManyToOne
@PrimaryKeyJoinColumn(name = "clb_id", referencedColumnName = "Clb_id")
Club club;
}
Я не включая классы Club
и SycsCoordinatorClubPk
сейчас, потому что они, кажется, не имеет отношения к этой проблеме. Запрос, Hibernate генерирует несколько раз является:
select
clubs0_.club_Clb_Id as club4_0_3_,
clubs0_.clb_id_fk as clb1_3_,
clubs0_.sycs_coord_id as sycs2_3_,
clubs0_.clb_id_fk as clb1_2_2_,
clubs0_.sycs_coord_id as sycs2_2_2_,
clubs0_.club_Clb_Id as club4_2_2_,
clubs0_.coordinator_sycs_coord_id as coordina5_2_2_,
clubs0_.lst_updt_dt as lst3_2_2_,
clubs0_.sycs_coord_secur_grp_cd as sycs6_2_2_,
sycscoordi1_.sycs_coord_id as sycs1_0_0_,
sycscoordi2_.sycs_coord_secur_level_id as sycs4_3_1_
from
sycs_coord_clb clubs0_
left outer join
sycs_coord sycscoordi1_
on clubs0_.coordinator_sycs_coord_id=sycscoordi1_.sycs_coord_id
where
clubs0_.club_Clb_Id=?
Обратите внимание, что иногда имя столбца coordinator_sycs_coord_id
появляется в запросе, даже если нет такого имени ни в одной из аннотаций. Почему это?
Я проверю ответ принять, как только я могу это исправить. Большое спасибо. –
Это сработало. Я должен был также добавить 'updatable = false, insertable = false'. Большое спасибо. –