[Hibernate]「column ambiguously defined」異常
HibernateのNativeSQLを使用してクエリー文を書きましたが、バックグラウンドでSQL構文エラーが報告されました.具体的なエラーは以下の通りです.
2つのテーブルに同じフィールドが含まれている場合、同じフィールドに対する操作にテーブル名を付けないと、次のような例外が表示されます.
Studioテーブル:
id
name
1
student1
2
student2
id
name
studentid
1
teacher
1
理由2:
もう1つのケースでこの問題が発生します
しかし、Hibernateのクエリは上記のエラーを報告するので、問題はHibernate方言やJDBCドライバにあるはずです.
解決策は、重複するデータに別名を付けることです.
参考記事:
http://stackoverflow.com/questions/4811816/sql-column-ambiguously-defined-when-run-from-hibernate
[2012-08-08 12:55:00] ERROR -> ORA-00918: column ambiguously defined
[2012-08-08 12:55:00] ERROR -> org.hibernate.exception.SQLGrammarException: could not execute query
理由1:2つのテーブルに同じフィールドが含まれている場合、同じフィールドに対する操作にテーブル名を付けないと、次のような例外が表示されます.
Studioテーブル:
id
name
1
student1
2
student2
CREATE TABLE `Student` (
`id` int(11) NOT NULL,
`name` char(20) NOT NULL,
PRIMARY KEY (`id`)
)
Teacherテーブル:id
name
studentid
1
teacher
1
CREATE TABLE `Teacher` (
`id` int(11) NOT NULL,
`name` char(20) NOT NULL,
`studentid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `FK_STUDENTID` FOREIGN KEY (`studentid`) REFERENCES `student` (`id`)
)
次のsqlクエリを使用すると、上の例外が表示されます.select name from Teacher t LEFT OUTER JOIN Student s on t.studentid = s.id
SQL文自体に問題がありますが、実際にデータベースはSQLのnameがStudioテーブルのnameフィールドなのかTeacherテーブルのnameフィールドなのか分かりません.理由2:
もう1つのケースでこの問題が発生します
select t.name,t.name,t.name
from Teacher t LEFT OUTER JOIN Student s on t.studentid = s.id
SQL文自体は問題なく、データベースクライアントやPL/SQLなどのツールでエラーが発生せず、結果を正常に照会できます.しかし、Hibernateのクエリは上記のエラーを報告するので、問題はHibernate方言やJDBCドライバにあるはずです.
解決策は、重複するデータに別名を付けることです.
select t.name as name1,t.name as name2,t.name as name3
from Teacher t LEFT OUTER JOIN Student s on t.studentid = s.id
参考記事:
http://stackoverflow.com/questions/4811816/sql-column-ambiguously-defined-when-run-from-hibernate