2016-11-03 9 views
3

私はJPAで直感的な関係があると思いました。このように見えます。 CompanyGroup:PSQLException:エラー:または近くに文法エラーがあります

@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; 
} 

が会社:

@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; 
} 

ユーザー:

@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; 
} 

私はこれが動作しないセッター、ゲッターなど

を省略しています。私は完全に空のデータベースにCompanyGroup(2社、各社は2人のユーザー、すべてのエンティティは一意です)を保存しようとしています。

私はこのようなサービスにアクセスする春のデータを使用して、これを持続:

@Service 
public class ConcreteCompanyGroupService implements CompanyGroupService { 

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

私は、このメソッドを呼び出すしようとすると、私は、この受信:

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) 

うまくいけば、私は愚かな何かを行っているが誰かがすばやく見つけることができます。私はこれを解決する方法を知らない。

EDIT:私のpom.xmlで

ドライバ:

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

ここで起こっていることと同じに見えます:http://stackoverflow.com/questions/3608420/hibernate-saving-userモデルからポストグル –

答えて

8

あなたのエンティティは、SQL予約キーワード(User)でテーブル名に渡ってマッピングします。悲しいことに、選択したJPAプロバイダはテーブル名の識別子を自動的に引用しないので、テーブルを参照するときに例外が発生します。

解決方法は、@Tableアノテーションでテーブル名を自分自身で引用するか、テーブル名を予約済みのキーワードに変更しないでください。または、そのような予約済みのキーワードを自動的に引用するJPAプロバイダを使用してください(例:DataNucleus

関連する問題