2017-10-18 6 views
1

J'ai un projet simple avec les classes ci-dessous définies. Cela fonctionne très bien dans spring-boot 1.5.4, spring-data-common 1.13, et spring-data-jpa 1.11. Lorsque je fais une mise à niveau vers spring-boot 2.0.0.M5, spring-data-commons 2.0.0 et spring-data-jpa-2.0.0, j'obtiens une exception PropertyReferenceException au démarrage qui dit "Aucune propriété trouvée pour tapez SimpleEntity! " Malheureusement, je ne peux pas obtenir la trace de la pile de l'ordinateur, j'ai l'erreur, il est très verrouillé pour la sécurité.La mise à niveau de Spring Data 1.11 vers Spring Data 2.0 génère "Aucune propriété trouvée pour le type SimpleEntity!"

Des idées? Les autres articles que j'ai trouvés ne semblent pas correspondre à ma situation.

Voici les classes (modifié les noms, mais vous voyez l'idée):

package entity; 

@MappedSuperclass 
public abstract class BaseEntity implements Serializable { 
.... 
} 

package entity; 

@Entity 
@Table(schema = "ENTITIES", name = "SIMPLE") 
public class SimpleEntity extends BaseEntity { 
    @Column(name = "ID") 
    private Long id; 

    @Column(name = "CODE") 
    private String code; 

    @Column(name = "NAME") 
    private String name; 

    ... getters and setters ... 
} 

package repository; 
imoport org.springframework.data.repository.Repository 

public interface SimpleRepository extends Repository<SimpleEntity, Long> { 
    public SimpleEntity save(SimpleEntity entity); 
    public List<SimpleEntity> save(List<SimpleEntity> entities); 
    public void delete(Long id); 
    public SimpleEntity findOne(Long id); 
    public List<SimpleEntity> findAllByOrderByNameAsc(); 
    public List<SimpleEntity> findByCode(String code); 
    public List<SimpleEntity> findByNameIgnoreCaseOrderByNameAsc(String name); 
} 

Répondre

1

Turns out il y a un changement de rupture au printemps de données 2.0 interface CrudRepository. L'erreur que je reçu se produit dans les conditions suivantes:

  1. Vous avez un projet 1.x Sping de données
  2. Vous disposez d'une interface qui étend Repository directement, pas un sous-interface comme CrudRepository
  3. Votre subinterface Repository Déclare la méthode "vide supprimer (ID)" trouvé dans CrudRepository (dans mon cas "vide delete (long)"
  4. mise à jour vers 2.x Spring données

Le problème est que CrudRepository 2.x ne l Onger a une méthode "void delete (ID)", elle a été supprimée et une nouvelle méthode "void deleteById (ID)" a été ajoutée. Lorsque Spring data voit une signature de méthode de suppression qu'il ne reconnaît pas, il génère une erreur concernant la suppression de la propriété de la classe d'entité, ce qui est vrai pour 1.2 et 2.x.

+0

J'ai rencontré le même problème et je n'ai trouvé aucune documentation pour ce cas. – nivash

+0

Je ne m'attendrais pas à ce qu'il y ait des docs pour ça. Voir point 2 ci-dessus: Je choisissais d'utiliser Repository - une interface vide - où il nous appartient de définir correctement les méthodes qui sont un sous-ensemble de CrudRepository. Si je vais cette route et déclare une méthode avec une signature non reconnue, c'est mon problème :) Cela signifie juste que je dois être conscient de cela lors de la mise à niveau. La seule chose que Spring pourrait faire mieux est de fournir un message d'erreur indiquant qu'une signature de méthode non reconnue est déclarée, avec une URL vers l'interface JavaDocs pour l'espace de stockage de cette version spécifique de Spring Data. – Greg