2

私はこのような私のモデルを持っています:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "resourceType", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Resource {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    Long id;

    String foo;
}


@MappedSuperclass
public abstract class NetworkResource extends Resource { 
    String bar;
}

@Entity
@DiscriminatorValue(value = "1")
public class URL extends NetworkResource {
     String url;
}

ほとんどの場合、リソースを拡張するすべてのテーブルを結合したくないので、より具体的な実装すべてに識別値を入れます networkresource。たとえば、テーブルのみを結合します。

だから、どうすればそれができるのだろうと思っていました。

私はすでに次のようなことを試しました:

SELECT c FROM URL c LEFT JOIN c.resource r where r.resourceType = 1 and r.url = :ip

しかし、を追加するとコンパイルエラーが発生しましたr.resourceType = 1

だから、どうすればそれを行うことができますか?

ありがとう。

4

1 に答える 1

0

あなたがやろうとしていることについての少しの仮定に基づいて、私はあなたがただ欲しいと思います:

select c from URL c where c.url = :ip

Hibernateは、ディスクリミネーターの結合と制限の追加を処理します。それがHibernateの目的です。

于 2012-09-24T19:44:16.187 に答える