我知道之前已经问过这类问题,但我对休眠很新,而且我很难理解这个案例。所以我在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
我非常感谢任何帮助和建议。
答案 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_
之类的前缀,这样它们就不会干扰其他标识符。