2013-01-02 1 views
0

일부 테이블에서 엔티티 값을로드하는 보조 독립 실행 형 응용 프로그램이 있는데, 이는 Hibernate가 키 값을 지정하지 않고 레코드를 작성하려고하기 때문에 떨어집니다 @GeneratedValue(strategy=GenerationType.AUTO)).JPA -> 자동 ID를 생성하지 않는 Hibernate

빈은 다음과 같습니다 최대 절전 로그에 표시

@Entity 
public class Location implements Serializable { 

    private static final long serialVersionUID = 1L; 

    // startRegion attributes 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id = 0; 

    @ManyToOne(fetch = FetchType.LAZY) 
    private Location parent = null; 

    @Column(nullable=false) 
    private boolean active = false; 

    @OneToMany(mappedBy="parent", cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
    private Set<Location> divisions = null; 

    @OneToMany(mappedBy="location", fetch=FetchType.EAGER, cascade=CascadeType.ALL) 
    @MapKey(name="localeId") 
    private Map<String, Location_i18n> descriptions = new HashMap<String, Location_i18n>(); 

    @Column(nullable=true, length=150) 
    private String path = null; 

    @Column(nullable=true, length=20) 
    private String prismaCode = null; 

    @Column(nullable=true, length=5) 
    private String shortCode = null; 
} 

은 SQL이 id 필드 누락되었습니다 분명히 제약 조건 위반 예외가 발생

insert into Location (active, parent_id, path, prismaCode, shortCode) values (?, ?, ?, ?, ?) 

. persistence.xml에서

관련 속성 :

<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/> 
    <property name="hibernate.show_sql" value="true"/> 
    <property name="hibernate.hbm2ddl.auto" value="validate"/> 
    <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> 

내 좌절감에 추가하려면, 나는 이전 과정에서 다소 유사한 과정을했지만 나는 문제를 일으키는 어떤 차이를 찾을 수 없습니다.

나는 MS SQL 2008 Express에 대해 최대 절전 모드 3.6.10 및 4.1.8을 시도했다.

아이디어가 있으십니까? 미리 감사드립니다.

답변

1

데이터베이스의 AUTO 전략이 데이터베이스를 사용하여 ID를 생성하기 때문에 작동하지 않습니다. 표의 ID 열은 자동 증가 열이어야하며 그렇지 않으면 ID 생성 전략을 변경해야합니다.

+0

당신이 옳았 확인; hibernate가 테이블을 생성하도록 만들었지 만,'id' 필드는 MS SQL에서'Identity'로 정의되지 않았습니다. 모든 테이블을 떨어 뜨리고 이제는 작동합니다. 고마워요. – SJuan76

+0

"ID를 생성하지 않음"이라는 Google 검색을 통해 방문하는 사람들을위한 팁 ... 내 증상은 비슷하지만 근본 원인이 다릅니다. ID 열이 Int 일 때 Hibernate는 조용하고 신비한 방식으로 실패합니다. Int를 Long으로 변경하면 나를 고정시킵니다. –

-1

당신은 MSSQL을 사용하는 경우 배치해야합니다 귀하의 getter 메소드 위의 모든 주석 ... 몇 번 변수 (주로 그 MSSQL) 위에서 정의 된 주석을 ... 무시 최대 절전 모드