[Hibernate]「column ambiguously defined」異常


HibernateのNativeSQLを使用してクエリー文を書きましたが、バックグラウンドでSQL構文エラーが報告されました.具体的なエラーは以下の通りです.
[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