2012-05-01 12 views
0

Spring-data/jpa/hibernate/mysql/junitアプリケーションのinsert文に小さな問題があります。単純なINSERT文を実行できるかどうかを調べるために、小さな単体テストを作成しました。 これは私が持っているものです。Hibernate、jpa、mysql

@Test 
public void testAddAssignment() { 
    Assignment assignment = new Assignment(); 
    assignment.setCharacter("Z"); 
    assignment.setType(1); 
    assignmentController.addAssignment(assignment); 
    assignment = assignmentController.findAssignmentById(16); 
    assertEquals(16, assignment.getId()); 
    assertEquals(1, assignment.getType()); 
    assertEquals("Z", assignment.getCharacter()); 
} 

私はこれを実行しようとすると、私は次のエラーを取得:

org.springframework.dao.InvalidDataAccessResourceUsageException: could not insert: [com.byronvoorbach.domain.Assignment]; SQL [insert into Assignment (CHARACTER, TYPE) values (?, ?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not insert: [com.byronvoorbach.domain.Assignment] 

を、これは私のaddAssignment(assigment)です。

@Transactional 
public Assignment addAssignment(Assignment assignment) { 
    return repository.save(assignment); 
} 

そして、これが私のリポジトリです:

@Transactional(readOnly = true) 
public interface AssignmentRepository extends JpaRepository<Assignment, Long> { 

public List<Assignment> findByType(int type); 
} 

私は、クエリが台無しに取得する場所を見つけることができませんよ、SQLクエリを書いたことはありませんので。 誰かがアイデアを持っていますか? JB Nizetのおかげとfmucar私はこの問題を解決することができました:

EDIT(あなたがより多くのソースコードや私の.xmlファイルが必要な場合は、私に教えてください)。私は列の名前を変更し、今それは動作します!私が気づいていない列の命名には、控えめにいくつかの制限があります。

答えて

2

charactertype以外のものを列名として使用することをお勧めします。これはおそらくSQLで予約されたキーワードであるためです。

+0

Pff私はこの結論に来なかったでしょう...ありがとう! –

+0

私はちょうど新しい名前でテストをreranし、それは魅力のように動作します!もう一度ありがとう –

1
CHARACTER and TYPE are keywords for sql. 

キーワードを列名として使用しないでください。それは問題かもしれません。

+0

あなたの入力のためにもありがとう! –

+0

あなたは大歓迎です。 – fmucar