我有实体链用户-〉加密钱包-〉列表〈加密计数〉
1.
public class User {
@Id
@Column(name = "id")
@GenericGenerator(name = "uuidFromIp" , strategy = "org.hibernate.id.uuid.CustomVersionOneStrategy")
@GeneratedValue(generator = "uuid_gen_strategy")
private UUID id;
@Column(name = "user_name")
private String userName;
@Column(name = "email")
private String email;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "crypto_wallet_id")
private CryptoWallet cryptoWallet;
}
public class CryptoWallet {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "balance")
private BigDecimal balance;
@OneToMany(mappedBy = "cryptoWallet", cascade = CascadeType.ALL)
private List<CryptoCount> cryptoCounts;
@OneToOne(mappedBy = "cryptoWallet")
private User walletOwner;
}
public class CryptoCount {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "crypto_id")
private CryptoCurrency cryptoCurrency;
@Column(name = "count")
private BigDecimal countOfCrypto;
@ManyToOne
@JoinColumn(name = "crypto_wallet_id")
private CryptoWallet cryptoWallet;
}
我的任务是在一个请求中按CryptoWalletOwnerId加载所有CryptoCount
当我使用下一个方法在仓库层一切正常工作(与一个查询)。
@EntityGraph(attributePaths = {"cryptoCurrency","cryptoWallet","cryptoWallet.walletOwner"})
List<CryptoCount> findAllByCryptoWalletWalletOwnerId(UUID id);
- 但是**
当我这样注解CryptoCount时:
@NamedEntityGraph(name = "CryptoCountWithCurrencyAndWallet",attributeNodes = {
@NamedAttributeNode(value = "cryptoCurrency"),
@NamedAttributeNode(value = "cryptoWallet")
})
加密钱包是这样的:
@NamedEntityGraph(name = "WalletWithCryptoCountsAndWalletOwner", attributeNodes = {
@NamedAttributeNode(value = "cryptoCounts"),
@NamedAttributeNode(value = "walletOwner",subgraph = "UserWithWallet")
}, subgraphs = {
@NamedSubgraph(name = "UserWithWallet", attributeNodes = @NamedAttributeNode("cryptoWallet"))
})
还有这样的用户:
@NamedEntityGraph(name = "UserWithWallet",attributeNodes = {
@NamedAttributeNode("cryptoWallet")
},subgraphs = {
@NamedSubgraph(name = "userWithWallet", attributeNodes = {@NamedAttributeNode("cryptoWallet")})
})
并使用存储库中的下一个方法:
@EntityGraph(value = "CryptoCountWithCurrencyAndWallet")
List<CryptoCount> findAllByCryptoWalletWalletOwnerId(UUID id);
我得到了两个数据库查询而不是一个。我的代码有什么问题?
1条答案
按热度按时间sulc1iza1#
在CryptoCount中解决了该问题