Nous utilisons JPA avec hibernate comme implémentation. Supposons que j'ai la DTO suivante:JPA/Hibernate + HQL/JPQL: sélectionnez DTO avec le paramètre BigDecimal
public class SupplierInfoDto{
private String supplierName;
private BigDecimal remainingFinances;
public SupplierInfoDto(String supplierName, BigDecimal remainingFinances){
this.supplierName = supplierName;
this.remainingFinances = remainingFinances;
}
// getters/setters
}
Je ne peux pas sembler se hiberner trouver correctement ce constructeur. J'ai d'abord essayé la requête suivante (le modèle est plus compliqué que cela, et j'ai besoin de récupérer des agrégations finalement (pas directement sur les entités), c'est pourquoi j'obtiens un DTO au lieu des entités):
SELECT NEW com.company.dto.SupplierInfoDto(s.name, f.remaining)
FROM Supplier s INNER JOIN Finances f
WHERE s.id = :SupplierId
Cependant, j'obtiens une exception org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class
.
La colonne remaining
je sélectionne à partir est stocké sous forme d'un flotteur dans MSSQL (je sais, je sais que l'argent ne doit jamais être stocké sous forme de flotteurs, mais c'est un système existant où je ne peux pas simplement changer ce type de données) ..
en tant que test, j'ai essayé la requête suivante, mais avec la même exception que ci-dessus:
SELECT NEW com.company.dto.SupplierInfoDto(s.name, NEW java.math.BigDecimal(10))
FROM Supplier s
WHERE s.id = :SupplierId
Alors ma question est la suivante: Comment puis-je faire hiberner/JPA trouver le constructeur approprié pour les deux requêtes ci-dessus? La propriété remaining
est de type double sur l'entité Finances (pas ma décision).
De quel type est le champ/colonneFinance restant? – RNJ
J'ai mis à jour la question. –
Pouvez-vous essayer d'inclure un constructeur par défaut? –