Я получаю ошибку сопоставления, и мне нужна помощь, чтобы найти проблему.
У меня есть две таблицы (TBLAUCTIONHEADER и TBLUSER). Я добавил третью таблицу, чтобы связать пользователей с аукционистами (TBLAUCTIONHEADERUSER). Эта третья таблица имеет только два столбца (userid и auctionheaderid), которые являются внешними ключами идентификаторов таблиц tblauctionheader и tbluser.
Я сопоставил его в hbm файле аукциониста, таким образом:
<bag name="eventApprovers" table="TBLAUCTIONHEADERUSER" fetch="select" lazy="true">
<key column="AUCTIONHEADERID"/>
<many-to-many column="USERID" class="com.lalala.user.dataobject.User"/>
</bag>
и я создал список в классе AuctionHeader.java:
//many-to-many
private List<User> eventApprovers;
в моем действии, когда я вызываю aucHeader.getEventApprovers();
, Я получаю следующие ошибки в моем журнале:
Exception: org.hibernate.exception.SQLGrammarException: could not initialize a collection: [com.lalala.auction.admin.dataobject.AuctionHeader.eventApprovers#12000]
а также
Caused by: java.sql.SQLException: ORA-00904: "EVENTAPPRO0_"."AUCTIONHEADERID": invalid identifier
Я не понял, почему/как создается идентификатор "EVENTAPPRO0 _". "AUCTIONHEADERID".
Кто-нибудь знает, что я могу сделать неправильно?
Я сам выяснил эту проблему.
Я сопоставлял неправильное имя столбца:
где я установил:
<bag name="eventApprovers" table="TBLAUCTIONHEADERUSER" fetch="select" lazy="true">
<key column="AUCTIONHEADERID"/>
<many-to-many column="USERID" class="com.lalala.user.dataobject.User"/>
</bag>
key column
должен быть просто HEADERID
, поэтому:
<bag name="eventApprovers" table="TBLAUCTIONHEADERUSER" fetch="select" lazy="true">
<key column="HEADERID"/>
<many-to-many column="USERID" class="com.lalala.user.dataobject.User"/>
</bag>
И это была проблема.