Pas de convertisseur trouvés capables de conversion de type de type
Je suis le suivant stacktrace:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [referencedata.ABDeadlineType] to type [referencedata.DeadlineType]
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:324)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:206)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:187)
at org.springframework.data.repository.query.ResultProcessor$ProjectingConverter.convert(ResultProcessor.java:256)
at org.springframework.data.repository.query.ResultProcessor$ChainingConverter$1.convert(ResultProcessor.java:201)
at org.springframework.data.repository.query.ResultProcessor$ChainingConverter.convert(ResultProcessor.java:212)
at org.springframework.data.repository.query.ResultProcessor.processResult(ResultProcessor.java:149)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:121)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:106)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:483)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:461)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy143.findAllSummarizedBy(Unknown Source)
at
Mes classes sont les suivantes
DeadlineType
@Data
public class DeadlineType extends DefaultIdAndText {
@Value("#{target.id}")
String id;
@Value("#{target.code}")
String text;
@Value("#{target.id}")
public String getId() {
return id;
}
@Value("#{target.code}")
public String getText() {
return text;
}
}
ABDeadlineType
@Data
@Entity
@Table(name = "deadline_type")
@AllArgsConstructor
@NoArgsConstructor
public class ABDeadlineType {
private @Id
String id;
private String code;
}
DefaultIdAndText
@Data @AllArgsConstructor
@NoArgsConstructor
public class DefaultIdAndText implements IdAndText {
public DefaultIdAndText(IdAndText idAndText){
this.id = idAndText.getId();
this.text = idAndText.getText();
}
@NotEmpty String id;
String text;
}
DeadlineTypeRepository
public interface DeadlineTypeRepository extends JpaRepository<ABDeadlineType, Long> {
List<DeadlineType> findAllSummarizedBy();
}
Mise à jour
Pourrait-il être un problème que la projection de/en utilisant la cartographie @Value("#{target.id}")
format, ne fonctionne pas correctement car ils ont été fait sur une classe, et non pas sur une interface???
exception semble OK. Classess ne sont pas connectés de toute manière (et DeadlineType n'est pas connu pour APP engine). Est-ce code correctement collé? BTW donner l'importation de Lombok projet (ou un commentaire dans le code), les fragments seront plus intuitive, sans les quelques secondes nécessaires "qu'est-ce que cette"
est-ce lombok
Cz , C'est le Printemps de la Valeur pour une utilisation avec JPA et des projections.
Salut Menelae, pouvez-vous confirmer que votre hypothèse concernant le @de la Valeur et de la classe au lieu de l'interface est correcte? Parce que je suis confronté à un problème similaire et je voudrais utiliser la classe DTO qui est déjà déclaré et utilisé dans de nombreux endroits dans mon projet, donc je voudrais éviter l'introduction d'une nouvelle interface.
Pas liées à la question, mais liés à votre Lombok
est-ce lombok
@Value
ou au Printemps @Value
?Cz , C'est le Printemps de la Valeur pour une utilisation avec JPA et des projections.
Salut Menelae, pouvez-vous confirmer que votre hypothèse concernant le @de la Valeur et de la classe au lieu de l'interface est correcte? Parce que je suis confronté à un problème similaire et je voudrais utiliser la classe DTO qui est déjà déclaré et utilisé dans de nombreux endroits dans mon projet, donc je voudrais éviter l'introduction d'une nouvelle interface.
Pas liées à la question, mais liés à votre Lombok
@Data
annotation sur vos entités. Qui peut être très dangereux, car il génère un d'égal à égal, toString et hashcode basés sur TOUS les champs de votre entité, y compris les paresseux associations... Donc, quand vous jouez avec des entités en dehors d'une transaction et d'essayer de l'imprimer ou de le comparer à un autre, il va essayer de récupérer tous ces paresseux associations (en dehors d'une transaction) et lancer un LazyInitializationException!
OriginalL'auteur Menelaos Bakopoulos | 2017-09-06
Vous devez vous connecter pour publier un commentaire.
Retour
ABDeadlineType
de dépôt:et ensuite de les convertir à DeadlineType. Manuellement ou utiliser mapstruct.
Ou appeler le constructeur de
@Query
annotation:Ou de l'utilisation
@Projection
:Mise à jour:
Le printemps peut fonctionner sans
@Projection
annotation:projections
? Au moins c'est ce qu'une collègue mentionne@Value
annotations sont pour.Voir mise à jour de réponse. Docs: docs.printemps.io/printemps-données/repos/docs/current/reference/html/...
Merci! Il semble que le code spécifique n'a pas été compris de la
projection
annotation, car il semble qu'il y a une fonctionnalité non documentée que vous n'avez pas réellement besoin. Le printemps fait la conversion. Mais la personne que le vieux me ce a appris de la lecture du cas d'utilisation.Ne pouvez pas trouver un
@Projection
annotation.voir
spring-boot-starter-data-rest
dépendanceOriginalL'auteur Nick Savenia
Si vous regardez la trace de pile d'exception, il dit qu'il a échoué à convertir à partir de ABDeadlineType à DeadlineType. Parce que votre référentiel va vous retourner les objets de ABDeadlineType. Comment le spring-data-jpa pour la transformer en l'autre(DeadlineType). Vous devez renvoyer le même type de référentiel et ensuite intermédiaire util classe pour le convertir dans votre classe de modèle.
OriginalL'auteur Sangam Belose
Vous pouvez déjà avoir ce travail, mais la j'ai créé un projet de test avec les classes ci-dessous vous permettant de récupérer les données dans une entité, de projection ou de dto.
Projection - ce sera le retour de la colonne code à deux reprises, une fois nommé code et a également nommé un texte (par exemple seulement). Comme vous le dites ci-dessus, vous n'avez pas besoin de l' @Projection d'annotation
DTO classe - je ne sais pas pourquoi cela a été l'héritage de votre classe de base et redéfinir les attributs. JsonProperty juste un exemple de comment vous pouvez modifier le nom du champ transmis à un REPOS de point de fin
Classe d'entité
Référentiel - votre référentiel s'étend JpaRepository<ABDeadlineType, Long> mais l'Id est une Chaîne, donc, mis à jour ci-dessous pour JpaRepository<ABDeadlineType, String>
Exemple Contrôleur de - accède au référentiel directement pour simplifier le code
Espère que ça aide
Les
OriginalL'auteur Les Wilson