在Hibernate实体中添加字段以用布尔值指示该实体是否在另一个表中引用的最干净的方法

在Hibernate实体中添加字段以用布尔值指示该实体是否在另一个表中引用的最干净的方法,hibernate,jpa,entity,Hibernate,Jpa,Entity,我有一个数据库,在两个选项卡之间有一个经典的FK。 表A由表B中的FK引用 我正在为A创建一个实体,我希望它有一个布尔属性,指示它是否被至少1个B引用 是否可以这样做,这样我就不必每次都添加一个列表并检查它是否为空,即使我根本不关心B?您可以使用特定于hibernate的、不符合JPA的@Formula注释 谢谢,让它与: @Formulavalue=从表\u B中选择计数表\u B.ID,其中表\u B.A\u ID=ID 由于我正在处理另一个表,所以请输入select关键字 在整个语句周围加

我有一个数据库,在两个选项卡之间有一个经典的FK。 表A由表B中的FK引用

我正在为A创建一个实体,我希望它有一个布尔属性,指示它是否被至少1个B引用


是否可以这样做,这样我就不必每次都添加一个列表并检查它是否为空,即使我根本不关心B?

您可以使用特定于hibernate的、不符合JPA的@Formula注释


谢谢,让它与:

@Formulavalue=从表\u B中选择计数表\u B.ID,其中表\u B.A\u ID=ID

由于我正在处理另一个表,所以请输入select关键字 在整个语句周围加2个括号以避免SQL错误
3不要在计数和左括号之间留空格,否则它会添加一个别名来计数并弄乱sql

谢谢,我已经尝试过了,但我认为我是sol,因为我使用JPA事务,它不会考虑hibernate注释?每当我添加@Formula时,我都会遇到以下问题:java.sql.SQLSyntaxErrorException:ORA-00936:missing expression由于Hibernate是您的JPA提供程序,您可以根据需要使用Hibernate特定的注释。问题出在SQL中。我已经稍微更新了答案-试试看。没有骰子:@Formulacount*来自SQL\u TABLEB\u name B,其中B.A\u ID=ID。当我用硬编码值替换ID时,它甚至不起作用。发布你应用到公式的完整SQL加上堆栈跟踪。只要经过测试,@Formula就可以正常工作,如果我正在处理另一个属性,比如@Formulaid+2。至于SQL,它来自更高级别的select实体,在包含a的集合上具有一个fetch。无法在此处发布它。在原始消息中添加了堆栈
@Formula("select count(*) from table_b where a_id = id")
private int countOfB;

public boolean hasB(){
    return countOfB > 0;
}