2012-05-01 182 views
0

我在Spring-data/jpa/hibernate/mysql/junit应用程序中插入语句有一个小问题。我创建了一个小单元测试,看看我是否可以做一个简单的INSERT语句。 这是我有:休眠,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(分配新建分配FY);

@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我能解决这个问题。我改变了列名,现在它的工作原理!显然,列名命名有一些限制,我不知道。

回答

2

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

+0

PFF我永远不会得出这个结论......非常感谢! –

+0

我只是重新测试了新的名字,它的作用就像一个魅力!再次感谢 –

1
CHARACTER and TYPE are keywords for sql. 

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

+0

非常感谢您的意见! –

+0

你非常欢迎。 – fmucar