2016-11-03 3 views
3

Ich habe, was ich dachte, war eine direkte Beziehung in JPA. Sieht aus wie das. CompanyGroup:PSQLException: Fehler: Syntaxfehler bei oder nahe

@Entity 
@Table 
public class CompanyGroup implements Serializable { 


    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue 
    private Long id; 
    @Column(name = "name") 
    private String name; 
    @JoinColumn(name = "companies") 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private List<Company> companies; 
} 

Firma:

@Entity 
@Table 
public class Company implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Column(name = "name") 
    private String name; 
    @JoinColumn(name = "users") 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private List<User> users; 

    @Id 
    @GeneratedValue 
    private Long id; 
} 

Benutzer:

@Entity 
@Table 
public class User { 

    @Column(name = "firstName") 
    private String firstName; 
    @Column(name = "lastName") 
    private String lastName; 
    @Column(name = "email") 
    private String email; 


    @Id 
    @GeneratedValue 
    private Long id; 
} 

Ich habe weggelassen Setter, Getter usw.

Das funktioniert nicht. Ich versuche, eine CompanyGroup (hat 2 Firmen, jedes Unternehmen hat 2 Benutzer, alle Entitäten sind einzigartig) zu einer vollständig leeren Datenbank zu speichern.

I bestehen diese mit Spring-Daten, in einem Dienst wie diese zugegriffen:

@Service 
public class ConcreteCompanyGroupService implements CompanyGroupService { 

    @Autowired 
    private CompanyGroupRepository repository; 
    @Transactional 
    @Override 
    public void save(CompanyGroup group) { 
     repository.save(Collections.singleton(group)); 
    } 
} 

Wenn ich versuche, diese Methode, die ich diese erhalten zu nennen:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "User" 
    Position: 13 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2458) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2158) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:291) 

Hoffentlich habe ich getan, etwas Dummes das kann jemand schnell finden. Ich weiß nicht, wie ich das lösen soll.

EDIT:

Der Fahrer in meinem pom.xml:

<dependency> 
    <groupId>org.postgresql</groupId> 
    <artifactId>postgresql</artifactId> 
    <version>9.4.1211</version> 
</dependency> 
+0

Scheint so zu sein wie hier: http://stackoverflow.com/questions/3608420/hibernate-saving-user -Modell zu Postgres –

Antwort

8

Ihr Unternehmen abbildet über zu einem Tabellennamen, die ein reserviertes SQL-Schlüsselwort ist (User). Leider gibt der von Ihnen gewählte JPA-Anbieter die Tabellennamen-ID nicht automatisch an, und Sie erhalten Ausnahmen, wenn Sie sich auf die Tabelle beziehen.

Die Lösung besteht darin, entweder den Tabellennamen selbst in der @Table Annotation anzugeben oder den Tabellennamen so zu ändern, dass er kein reserviertes Schlüsselwort ist. Alternativ verwenden Sie einen JPA-Provider, der automatisch solche reservierten Schlüsselwörter für Sie angibt (z. B. DataNucleus)

Verwandte Themen