일부 테이블에서 엔티티 값을로드하는 보조 독립 실행 형 응용 프로그램이 있는데, 이는 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을 시도했다.
아이디어가 있으십니까? 미리 감사드립니다.
당신이 옳았 확인; hibernate가 테이블을 생성하도록 만들었지 만,'id' 필드는 MS SQL에서'Identity'로 정의되지 않았습니다. 모든 테이블을 떨어 뜨리고 이제는 작동합니다. 고마워요. – SJuan76
"ID를 생성하지 않음"이라는 Google 검색을 통해 방문하는 사람들을위한 팁 ... 내 증상은 비슷하지만 근본 원인이 다릅니다. ID 열이 Int 일 때 Hibernate는 조용하고 신비한 방식으로 실패합니다. Int를 Long으로 변경하면 나를 고정시킵니다. –