結合を使用して HQL で休止状態のクエリを実行し、その後query.list
、一致したオブジェクトのリストを返すために呼び出すとquery.list().get(0).getClass() == Object.getClass()
、期待されるオブジェクトのインスタンスではなく、実際のオブジェクト インスタンス (つまり ) のリストになってしまいます。
結合なしでクエリを実行すると、期待される型のオブジェクトが正しく返され、適切にキャストして使用することができます。
これまでのところ、私の検索では、これを引き起こしている可能性のあるものについて何も見つかりませんでした. オブジェクトが正しくマップされていることを確認するために、hql で結合を使用するときに他に何かする必要がありますか?
編集: 以下にコードの抜粋を追加しました。すべての名前を変更し、関連する部分のみを抽出する必要がありました (実際のコードは実際には車に関するものではありません)。
作業クエリ:
from Car car where car.name like :name
機能しないクエリ:
from Car car left join car.occupants occupant where car.name like :name OR (occupant.name like :oname)
車のエンティティ:
@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"someId"}),
@UniqueConstraint(columnNames = {"someOtherId"})})
public class Car extends SomeParentEntity
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 64)
private String someId;
@Column(length = 64)
private String name;
// ... Many columns and mappings removed ...
@OneToMany(mappedBy = "car", fetch = FetchType.LAZY)
private List<Occupant> occupants;
// ...
}
占有エンティティ:
@Entity(name = "car.Occupant")
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = { "name" }) })
public class User extends SomeParentEntity
{
@ManyToOne
@JoinColumn(name = "carId", nullable = false)
private Car car;
@Column(length = 64, nullable = false)
private String name;
// ... Many mappings / columns removed ...
}