2017-03-11 8 views
1

私はこれを理解しようとしていますが、このエラーの原因となった問題を見つけることができませんでした。 JPAを使用した以前の質問を見つけることができず、同じエラーが発生しました。これは、データベースにエンティティを永続化されたメインクラスです:SQLとJPAのエラー

package com.brandonemerson; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.EntityTransaction; 
import javax.persistence.Persistence; 

public class Main { 
    public static void main(String[] args) { 
     ComicBook comicBook =new ComicBook("Moon Knight Meets Spiderman", "Moon Knight", "Marvel Comics", 1975); 

     EntityManagerFactory emf =Persistence.createEntityManagerFactory("thePersistenceUnit"); 
     EntityManager em = emf.createEntityManager(); 

     EntityTransaction tx = em.getTransaction(); 
     tx.begin(); 
     em.persist(comicBook); 
     tx.commit(); 
     em.close(); 
     emf.close(); 
    } 
} 

そして、これは永続化されているエンティティです:

package com.brandonemerson; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

@Entity 
public class ComicBook { 

@Id @GeneratedValue 
private Long id; 
private String title; 
private String character; 
private String publisher; 
private Integer year; 

public ComicBook(){ 

} 
public ComicBook(String title, String character, String publisher, int year){ 
    setTitle(title); 
    setCharacter(character); 
    setPublisher(publisher); 
    setYear(year); 
} 

public Long getId() { 
    return id; 
} 
public void setId(Long id) { 
    this.id = id; 
} 
public String getTitle() { 
    return title; 
} 
public void setTitle(String title) { 
    this.title = title; 
} 
public String getCharacter() { 
    return character; 
} 
public void setCharacter(String character) { 
    this.character = character; 
} 
public String getPublisher() { 
    return publisher; 
} 
public void setPublisher(String publisher) { 
    this.publisher = publisher; 
} 
public int getYear() { 
    return year; 
} 
public void setYear(Integer year) { 
    this.year = year; 
} 

}

私は以下のエラーを取得しておいてください。

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER, PUBLISHER, TITLE, YEAR) VALUES (1651, 'Moon Knight', 'Marvel Comics',' at line 1 

私が何を変更しても。

+0

は、あなたのJPAプロバイダもキーワードではない、自動見積もりテーブル/列識別子を行うようです。いくつかのJPAプロバイダはあなたのためにそれをやっていますので、面倒なことはありません –

答えて

4

SQLのキーワード「文字」が問題であると私は思います。変数/フィールドに "character"という名前を付けました - これが正しく機能するためには、変数に別の名前を付ける必要があります。これはSQLキーワードではありません。もう1つのオプションは、@Column(name="Other_than_character") private String character;

+0

私はそれを試してみたところ、うまくいきました。ありがとう、あなたは命の恩人です! –

1

となります。問題は非常に簡単で、CHARACTERという名前になっています。これはMySQLの予約済みのキーワードであるため、クエリの列名として使用できません。

解決方法は、列の名前をsoemthingに変更することです。これは、MySQLキーワードのキーワードと一致しません。

参照リンク: https://dev.mysql.com/doc/refman/5.5/en/keywords.html