JPA requête de création de la commande par

Je suis en train d'apprendre le Printemps sur mon propre, et j'ai l'intention de le faire que par la création d'un blog web app. J'ai déjà le blog de base de la fonctionnalité de travail, qui est une page pour afficher les messages de blog, et une page avec un formulaire pour soumettre un. La page pour afficher les messages de blog montre le dernier billet de blog, et une liste des titres de tous les articles du blog dans la db.

Pour obtenir une liste ordonnée des billets de blog de la base de données j'ai d'abord créé une requête sql à l'intérieur de mon Dépôt de l'interface. Cela fonctionne, mais je veux maintenant utiliser la fonctionnalité où je peux simplement taper le nom de la méthode dans l'interface, au lieu du standard sql. J'ai trouvé la pris en charge les mots-clés ici: http://docs.spring.io/spring-data/jpa/docs/1.4.2.RELEASE/reference/html/jpa.repositories.html#jpa.query-methods.query-creation , et a essayé de la mettre en œuvre.

Donc, avec ma méthode findAllOrderByIdDesc() je suis en train de réaliser la même chose qu'avec ma requête sql. Je ne sais pas pourquoi ça ne fonctionne pas, je crois que j'ai utilisé les mots-clés correctement?

La stackstrace (dont je ne comprends pas tout):

Causés par: org.springframework.les données.la cartographie.PropertyReferenceException: Pas de propriété desc trouvé pour le type int
au org.springframework.les données.la cartographie.PropertyPath.(PropertyPath.java:75)
au org.springframework.les données.la cartographie.PropertyPath.créer(PropertyPath.java:327)
au org.springframework.les données.la cartographie.PropertyPath.créer(PropertyPath.java:307)
au org.springframework.les données.la cartographie.PropertyPath.créer(PropertyPath.java:330)
au org.springframework.les données.la cartographie.PropertyPath.créer(PropertyPath.java:353)
au org.springframework.les données.la cartographie.PropertyPath.créer(PropertyPath.java:307)
au org.springframework.les données.la cartographie.PropertyPath.à partir de(PropertyPath.java:271)
au org.springframework.les données.la cartographie.PropertyPath.à partir de(PropertyPath.java:245)
au org.springframework.les données.référentiel.de la requête.analyseur.Partie.(La partie.java:72)
au org.springframework.les données.référentiel.de la requête.analyseur.PartTree$OrPart.(PartTree.java:188)
au org.springframework.les données.référentiel.de la requête.analyseur.PartTree$Prédicat.buildTree(PartTree.java:277)
au org.springframework.les données.référentiel.de la requête.analyseur.PartTree$Prédicat.(PartTree.java:257)
au org.springframework.les données.référentiel.de la requête.analyseur.PartTree.(PartTree.java:71)
au org.springframework.les données.jpa.référentiel.de la requête.PartTreeJpaQuery.(PartTreeJpaQuery.java:57)
au org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:90)
au org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:162)
au org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:68)
au org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.(RepositoryFactorySupport.java:290)
au org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:158)
au org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:162)
au org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:44)
au org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:144)
... Plus de 32

Mon référentiel d'interface:

public interface PostRepository extends CrudRepository<Post, Integer> {

@Query("select p from Post p order by p.id desc")
Iterable<Post> findLastFirst();

Iterable<Post> findAllOrderByIdDesc();

}

Mon Post entité:

@Entity
public class Post {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private Date date;
private String title;
@Lob
private String body;

protected Post() {
    date = new Date();
}

public Post(String title, String body) {
    this.date = new Date();
    this.title = title;
    this.body = body;
}

public int getId() {
    return id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public Date getDate() {
    return date;
}

public String getBody() {
    return body;
}

public void setBody(String body) {
    this.body = body;
}
l'id doit être de type Long, pas de type int.
À l'aide d'un long au lieu de int donne le même résultat. Plus tôt, j'ai aussi essayé de trier sur la Date de la place, qui a aussi donné le même message d'erreur.
avez-vous utilisé à long ou Long? Long devrait être transposable.
Je vais manquer un @Temporelle annotation sur la date de la propriété. Et ce n'est pas une bonne idée d'appeler la propriété 'date' puisque c'est peut-être une réservé le mot clé SQL.
l'id peut être primitif ou de l'emballage des primitives.

OriginalL'auteur Kuurde | 2013-12-04