【问题标题】:Hibernate, jpa and mysql休眠、jpa 和 mysql
【发布时间】:2012-05-10 21:09:21
【问题描述】:

我在 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,我能够解决这个问题。我更改了列名,现在它可以工作了!!显然,列命名存在一些我不知道的限制。

【问题讨论】:

    标签: mysql sql hibernate jpa spring-data


    【解决方案1】:

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

    【讨论】:

    • 噗,我永远不会得出这个结论...非常感谢!!
    • 我刚刚用新名称重新运行了测试,它就像一个魅力!再次感谢
    【解决方案2】:
    CHARACTER and TYPE are keywords for sql.
    

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

    【讨论】:

    • 也非常感谢您的意见!!
    猜你喜欢
    • 2013-06-19
    • 2013-06-27
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2016-01-19
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多