为什么Hibernate抛出子查询返回的值超过1?

时间:2017-10-08 03:55:10

标签: sql hibernate

我知道之前已经问过这类问题,但我对休眠很新,而且我很难理解这个案例。所以我在Hibernate中使用这个@formula,这就是类:onSearchButtonPress = async () => { const { first, skip, orderBy, searchText } = this.state; const result = await this.props.client.query({ query: MY_QUERY, variables: { first, skip, orderBy, searchText } }); const items = result.data.items; this.props.data.updateQuery(prev => ({ ...prev, allItems: _.uniqBy([...prev.allItems, ...items], o => o.id) // lodash uniqBy helper method helps with removing older items // with the same id (essentially updating them) }); 映射是否与它有关?

所以我有一个像这样的实体类:

@ManyToOne

此子查询返回多个值:

@Entity
@Table(name = "ABC")
public class ABC{

    @Id
    @Column(name ="ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Access(AccessType.PROPERTY)
    private Long id;

    @Column(name="AMOUNT")
    private Double amount

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "R_ID")
    @Getter
    @Setter
    private TXY txy;

    @Formula((SELECT (abc.AMOUNT + ( abc.AMOUNT * ISNULL(tx.RATE,0) )) FROM ABC abc left join TXY tx on abc.R_ID = tx.ORIGINAL_R_ID WHERE abc.ID = ID)")
    @Getter
    private Double taxAmount;


}

我收到以下错误:

SELECT (abc.AMOUNT + ( abc.AMOUNT * ISNULL(tx.RATE,0) )) 
FROM ABC abc 
left join TXY tx on abc.R_ID = tx.ORIGINAL_R_ID 
WHERE abc.ID = ID

我非常感谢任何帮助和建议。

1 个答案:

答案 0 :(得分:0)

我对Hibernate并不熟悉,但这个问题很可疑:

SELECT (abc.AMOUNT + ( abc.AMOUNT * ISNULL(tx.RATE,0) ))
FROM ABC abc left join
     TXY tx
     on abc.R_ID = tx.ORIGINAL_R_ID
WHERE abc.ID = ID
---------------^

在大多数SQL编译器中,此ID将在查询中解析为abc.ID。因此,abc中包含非NULL ID的所有行都将被返回。

我将外部变量加上v_之类的前缀,这样它们就不会干扰其他标识符。