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(assignment);

@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

尝试使用除characterandtype作为列名之外的其他名称,因为这些可能是 SQL 中的保留关键字。

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

尽量不要使用关键字作为列名。这可能是问题所在。

于 2012-05-01T09:53:27.337 回答