2012-05-01 3 views
0

Spring 데이터/jpa/hibernate/mysql/junit 어플리케이션의 삽입 문에 약간의 문제가 있습니다. 간단한 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 (의 할당은)입니다;

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

는 그리고 이것은 내 저장소입니다 : 내가 쿼리가 엉망이됩니다 위치를 찾을 수있어 SQL 쿼리를 쓴 적이 있기 때문에

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

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

. 누구나 아이디어가 있습니까? JB Nizet에 감사 fmucar 나는이 문제를 해결할 수 있었다 :

EDIT (당신이 더 많은 소스 코드 또는 내 .xml 파일이 필요하면 알려주세요). 열 이름을 변경했는데 이제는 작동합니다! Apperantly 내가 인식하지 못했던 컬럼 이름 짓기에 몇 가지 제한이있다.

답변

2

charactertype 이외의 것을 열 이름으로 사용하십시오. SQL에 예약 된 키워드 일 수 있기 때문입니다.

+0

Pff 나는 결코이 결론에 도달하지 않았을 것이다. .. 고맙다 alot !! –

+0

새로운 이름으로 테스트를 다시 한 번 해보니 매력처럼 작동합니다! 다시 한 번 감사드립니다 –

1
CHARACTER and TYPE are keywords for sql. 

키워드를 열 이름으로 사용하지 마십시오. 그것은 문제 일 수 있습니다.

+0

귀하의 의견을 주셔서 감사합니다! –

+0

당신은 대단히 환영합니다. – fmucar