2
我擴展了實體用戶的實體Auditor擴展域模型。用戶是已經存在的舊實體(數據庫表)。現在,如果爲超級用戶(僅)執行一些查詢,Hibernate也會在審計員表上附加左外部聯接子句。有沒有人有一個想法如何解決它?只有超級類的Hibernate查詢
用戶類
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "users")
@DiscriminatorColumn(length = 10, name = "discriminator",
discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("user")
@SequenceGenerator(name = "users_id_seq",
sequenceName = "users_id_seq",
initialValue = 1, allocationSize =1)
public class User extends AbstractEntity implements UserDetails{
private static final long serialVersionUID = 198524L;
private Long id;
// ...
}
審計員類
@Entity
@Table(name = "auditor")
@DiscriminatorValue("auditor")
public class Auditor extends User {
private Country countery;
// ...
}
HQL查詢的實施例爲用戶列表
Query query = sessionFactory.getCurrentSession()
.createQuery("select type(u) from User u");
return Collections.checkedList(query.list(), User.class);
休眠generats例如爲:
select
case
when user0_1_.id is not null then 1
when user0_.id is not null then 0
end as col_0_0_
from
users user0_
left outer join
auditor user0_1_
on user0_.id=user0_1_.id
group by
user0_.id
order by
我曾經試過TABLE_PER_CLASS,但不是左外連接有UNION ALL在審計員桌上。我也集成了@DiscriminatorColumn,但生成的SQL是相同的。 –
如果您做了類似'從用戶那裏選擇您'的東西,您是否會在您的結果列表中同時獲得審覈員和用戶? – carbontax
兩者都不,只有用戶屬性。但問題是,Hibernate總是附加左外部連接子句。這是複雜查詢中的問題,其中使用了group by子句。另一方面,這也是不必要的開銷。 –