2017-02-28 4 views
0

Nachdem ich mir den Kopf zerbrochen habe, habe ich keine Ideen mehr und würde Hilfe brauchen. Was mich wirklich sehr intrigiert, ist die Einfachheit dessen, was ich versuche und immer noch die Unmöglichkeit, es zu erreichen ... Ich versuche eine kleine Demo von Federruhedaten zu machen, indem ich einige Entitäten erstelle und sie als Ruhestoffe aussetze persistent sie in einer In-Memory-h2-Datenbank.Spring Data Rest - Ressource wird nicht verfügbar, wenn Unterklasse

Der folgende Code funktioniert:

@Entity 
@Table(name="info") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="INFO_TYPE", discriminatorType=DiscriminatorType.STRING) 
public class ItemInfo { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    public long id; 
    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 
} 
@RepositoryRestResource(collectionResourceRel="itemInfos", path="itemInfos") 
public interface ItemInfoRepository extends PagingAndSortingRepository<ItemInfo, Long> { 

} 

Wenn ich eine Locke Anfrage für curl http://localhost:8080/itemInfos Ausgabe erhalte ich die folgende richtige Antwort:

{ 
    "_embedded" : { 
    "itemInfos" : [ ] 
    }, 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/itemInfos" 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/profile/itemInfos" 
    } 
    }, 
    "page" : { 
    "size" : 20, 
    "totalElements" : 0, 
    "totalPages" : 0, 
    "number" : 0 
    } 
} 

aber sobald ich eine Unterklasse Entität hinzufügen ItemInfo, die Ressource/itemInfos ist nicht mehr verfügbar.

So Hinzufügen der Klasse:

@Entity 
@Table(name="info") 
@DiscriminatorValue(value="COMMENT") 
public class UserComment extends ItemInfo { 
    private String from; 
    private String comment; 

    public String getFrom() { 
     return from; 
    } 

    public void setFrom(String from) { 
     this.from = from; 
    } 

    public String getComment() { 
     return comment; 
    } 

    public void setComment(String comment) { 
     this.comment = comment; 
    } 
} 

in der gleichen curl Befehl führen wie früher einen Fehler zu erzeugen:

{"timestamp":1488282548770,"status":500,"error":"Internal Server Error","exception":"org.springframework.dao.InvalidDataAccessResourceUsageException","message":"could not prepare statement; SQL [select iteminfo0_.id as id2_0_, iteminfo0_.comment as comment3_0_, iteminfo0_.from as from4_0_, iteminfo0_.info_type as info_typ1_0_ from info iteminfo0_ limit ?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement","path":"/itemInfos"} 

Des Weiteren ein neues ItemInfo hinzuzufügen versuchen, verursacht einen ähnlichen Fehler:

{"timestamp":1488282718547,"status":500,"error":"Internal Server Error","exception":"org.springframework.dao.InvalidDataAccessResourceUsageException","message":"could not prepare statement; SQL [insert into info (id, info_type) values (null, 'ItemInfo')]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement","path":"/itemInfos"} 

Das Hinzufügen eines UserCommentRepository löst auch das Problem in keiner Weise:

public interface UserCommentRepository extends PagingAndSortingRepository<UserComment, Long> { } 

In diesem Fall, wenn ich versuche, einen neuen Benutzer Kommentar hinzuzufügen:

curl -i -X POST -H "Content-Type:application/json" -d "{ \"from\" : \"Ana\", \"comment\" : \"some comment\" }" http://localhost:8080/userComments 

ich einen weiteren Fehler:

{"timestamp":1488282968879,"status":500,"error":"Internal Server Error","exception":"org.springframework.dao.InvalidDataAccessResourceUsageException","message":"could not prepare statement; SQL [insert into info (id, comment, from, info_type) values (null, ?, ?, 'COMMENT')]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement","path":"/userComments"} 

Es scheint, dass vollständig für meine Entitäten Erbe Hinzufügen ruiniert meine Ressourcen. Hatte jemand von euch ein ähnliches Problem ?!

Antwort

0

Ok ... Ich habe es herausgefunden (meistens aus Versehen) und es ist noch frustrierender. Das Problem war die Verwendung des Variablennamens "von". Es scheint, dass der Frühjahrsdatenrest dies als Schlüsselwort verwendet. Sobald ich den Namen dieser Variablen überarbeitet habe, hat alles wie erwartet funktioniert. Leider haben die Ausnahmen und Fehlermeldungen nicht geholfen. Hoffentlich werden andere nicht durch die gleiche Debugging-Hölle gehen ...

Verwandte Themen