2016-04-25 7 views
-1

ich ein Repository Methode wieJPA Query-transformiert wird

haben
@Query("from Application app where app.id.hostId = :hostId") 
List<Application> getApplicationsByApplicationId(@Param("hostId") String hostId); 

Und meine Domain-Klasse liest so etwas wie

public class Application { 

    @EmbeddedId 
    Composite id; 
    ... 
    ... 

    @Embeddable 
    public static class Composite implements java.io.Serializable { 
     @Column(name = "id") 
     private String id; 

     @Column(name = "hostId") 
     private String hostId; 
     .... 

irgendwo auf der Verarbeitungskette, wird hostId String host_id umgewandelt, so dass ich ein Fehler wie

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'application0_.host_id' in 'field list'. 

Ich versuche zu migta einen vorhandenen Hibernate/JPA-Layer in Spring Boot JPA. Alle Hinweise werden sehr geschätzt.

+0

Versuchen hinzufügen '@access (AccessType.FIELD)' Anmerkung für 'Composite' Klasse. Und machen 'Composite' Klasse nicht innerlich. Wie wird die Spalte 'host_id' in der Tabelle benannt? – HAYMbl4

+0

Es ist der gleiche Fehler mit den vorgeschriebenen Änderungen. Die Spalte in der DB wird in der Tabelle als 'hostid' bezeichnet. –

+0

möglicherweise dublicate http://stackoverflow.com/questions/25283198/spring-boot-jpa-column-name-annotation-ignored – HAYMbl4

Antwort

0

Dies wird durch die Hibernate-Benennungsstrategie verursacht. Die Standardstrategie transformiert Camel Case in Java in _ in Datenbank.

Wenn Sie dieses Verhalten nicht möchten, verwenden Sie JPA-Standard. Sie können es in application.properties gesetzt:

spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy 
0

Verwendung:

@Column(name = "hostid") 

Hinweis, dass alle klein geschrieben werden.