@ManyToOneの指定(解決)

うーん。むずかしい。そりゃ、EmployeeテーブルのキーIdに外部キーを張っているProjectテーブルがあったとして、そのProjectテーブルにある意味的に「リーダ」を表すカラムがemployee_idだったらいい。Projectエンティティクラスは、

public class Project {

  @Id
  @GeneratedValue
  public BigDecimal id;

  public BigDecimal employeeId;
  
  @ManyToOne
  public Employee employee;
:

とすれば、自動的に多対1を実現してくれる。Joinしたときに、Project のメンバーにちゃんとemployeeオブジェクトが紐づいてくれている。でも、実際問題、カラム名は「リーダ」なんだから leader_id とかにしたいじゃないか。というかそう仮定する。

そのときってどう指定すればよいんだろう?

public class Project {

  @Id
  @GeneratedValue
  public BigDecimal id;

  public BigDecimal leaderId;
  
  @ManyToOne
  @JoinColumn(name="LEADER_ID", referencedColumnName="ID")
  public Employee leader;
:

でもうまくいかない。こんなエラーがでる。

org.seasar.extension.jdbc.exception.PropertyNotFoundRuntimeException: [ESSR0701]エンティティ(Project)のプロパティ(employee)が見つかりません。
org.seasar.extension.jdbc.EntityMeta.getPropertyMeta(EntityMeta.java:175)
org.seasar.extension.jdbc.query.AutoSelectImpl.getPropertyMeta(AutoSelectImpl.java:698)
org.seasar.extension.jdbc.query.AutoSelectImpl.prepareJoin(AutoSelectImpl.java:556)
org.seasar.extension.jdbc.query.AutoSelectImpl.prepareJoins(AutoSelectImpl.java:539)
org.seasar.extension.jdbc.query.AutoSelectImpl.prepare(AutoSelectImpl.java:340)
org.seasar.extension.jdbc.query.AbstractSelect.getResultList(AbstractSelect.java:169)

  public Employee leader;

  public Employee employee;

にしたらうまくいくけどそういう問題じゃないよな。「リーダ」と「サブリーダ」がいたらどうすんねんって話やし。

アノテーションの属性もけっこうあるし、ややこしいなぁ。

追記

実際はStudySessionテーブルというのを使っていたのですが、このテーブルの背景を説明するのはアレなので便宜上Projectテーブルで説明していました。しかしStackTraceがStudySessionのほんまもんの方をはりつけてしまっていたため、混乱を招いてしまいました。

なので、Projectテーブルを実際につくって、実際に発生した例外を貼り付けなおしました。

追記2

Entityクラスをどうのこうのするのではなく、

select().innerJoin(”leader”).getResultList();

と、SQL生成側を変えることでうまくいきました。
id:koichikさん、ありがとうございました。