0

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

@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クエリを書いたことがないので、クエリが混乱する場所を見つけることができません。誰かアイデアがありますか?

(さらにソースコードまたは私の.xmlファイルが必要かどうか教えてください)

編集: JB Nizetとfmucarのおかげで、この問題を修正することができました。列名を変更しましたが、動作します!! 明らかに、私が気付いていなかった列の命名にはいくつかの制限があります。

4

2 に答える 2

2

これらはSQLで予約されているキーワードである可能性があるため、列名としてcharacterおよび以外のものを使用してみてください。type

于 2012-05-01T09:51:49.417 に答える
1
CHARACTER and TYPE are keywords for sql.

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

于 2012-05-01T09:53:27.337 に答える