휴지 상태 오류: save()를 호출하기 전에 이 클래스의 ID를 수동으로 할당해야 합니다.
원인: org.springframework.orm.hibernate3.Hibernate System Exception: 이 클래스의 ID는 save(): com.rfid.model을 호출하기 전에 수동으로 할당해야 합니다.역할. 네스트된 예외는 org.hibernate.id입니다.식별자 생성예외: 이 클래스의 ID는 save(): com.rfid.model을 호출하기 전에 수동으로 할당해야 합니다.역할.org.springframework.orm.springate3에 있습니다.Session Factory Utils.convert Hibernate Access예외(Session Factory Utils.java:676)org.springframework.orm.springate3에 있습니다.Hibernate Accessor.convert Hibernate Access예외(Hibernate Accessor.java:412)org.springframework.orm.springate3에 있습니다.HibernateTemplate.doExecute(HibernateTemplate).자바:424)org.springframework.orm.springate3에 있습니다.휴지 상태 템플릿execute With Native Session(Hibernate Template).자바:374)org.springframework.orm.springate3에 있습니다.HibernateTemplate.saveOrUpdate(HibernateTemplate).Java:748)com.wfos.engine에 접속합니다.wrapper.domain.domain.domain.domainWrapperImpl.save(WrapperImpl.java:159)... 47개 더원인 : org.hibernate.id식별자 생성예외: 이 클래스의 ID는 save(): com.rfid.model을 호출하기 전에 수동으로 할당해야 합니다.역할.org.hibernate.id 에 접속해 주세요.Assigned.generate(Assigned.java:53)org.syscate.event.def에 있습니다.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)org.syscate.event.def에 있습니다.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)org.syscate.event.def에 있습니다.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)org.syscate.event.def에 있습니다.DefaultSaveOrUpdateEventListener.SaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)org.syscate.event.def에 있습니다.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)org.contractate.contract에 있습니다.세션 임플fireSaveOrUpdate(SessionImpl.java:685)org.contractate.contract에 있습니다.SessionImpl.saveOrUpdate(SessionImpl.java:677)org.contractate.contract에 있습니다.SessionImpl.saveOrUpdate(SessionImpl.java:673)org.springframework.orm.springate3에 있습니다.HibernateTemplate$16.DoInHibernate(HibernateTemplate).자바:751)org.springframework.orm.springate3에 있습니다.HibernateTemplate.doExecute(HibernateTemplate).자바:419)...50개 추가경고 [21:14:21](CommonsLoggingOutput.java:59) : - - 오류: batchId [1]메시지 [java.lang.reflect]미신고던질 수 있다예외]
제 수업은 이렇습니다.
@Entity
@javax.persistence.Table(name="Role")
@Table(appliesTo = "Role")
public class Role {
@Id
@Column(name="U_id")
public String U_id;
public String U_pwd;
public String U_account;
public String U_mode;
public String U_status;
public String getU_pwd() {
return U_pwd;
}
public void setU_pwd(String u_pwd) {
U_pwd = u_pwd;
}
public String getU_account() {
return U_account;
}
public void setU_account(String u_account) {
U_account = u_account;
}
public String getU_id() {
return U_id;
}
public void setU_id(String u_id) {
U_id = u_id;
}
public String getU_mode() {
return U_mode;
}
public void setU_mode(String u_mode) {
U_mode = u_mode;
}
public String getU_status() {
return U_status;
}
public void setU_status(String u_status) {
U_status = u_status;
}
}
의 ★★★★★★★★★★★★★★★★★.@Entity
에는 '''가 .String
@Id
아이디
및 Long
java로하고 java를 합니다.@GeneratedValue
★★★★
@Id
@Column(name="U_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long U_id;
증가하는 ID 생성을 처리합니다.
Oracle 데이터베이스에 정의된 시퀀스 ID를 사용하여 이 문제를 해결했습니다.
ORACLE_DB_SEQ_ID
는 테이블의 시퀀스로 정의됩니다.또한 콘솔을 보고 확인에 사용되는 휴지 상태 SQL을 확인합니다.
@Id
@Column(name = "MY_ID", unique = true, nullable = false)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "id_Sequence")
@SequenceGenerator(name = "id_Sequence", sequenceName = "ORACLE_DB_SEQ_ID")
Long myId;
휴지 상태일 경우 지속/저장할 때 오브젝트에 ID가 있음을 알아두는 것이 중요합니다.따라서 다음 사항을 확인합니다.
private String U_id;
오브젝트를 유지할 때쯤이면 값이 됩니다.은 you 할 수 있습니다.@GeneratedValue
주석을 달거나 값을 수동으로 할당하는 방법.
할 필요가 , 경우(입니다), 의 경우 필드 하는 것이 .U_id
public Role (String U_id) { ... }
이렇게 하면 인스턴스화할 때까지 오브젝트에 ID가 유지됩니다.사용 사례와 애플리케이션이 동시에 어떻게 동작하는지 알 수 없지만 권장되지 않는 경우도 있습니다.ID가 고유한지 확인해야 합니다.
기타 주의사항:휴지 상태에서도 휴지 상태 설명서에 나와 있는 기본 컨스트럭터가 필요합니다.사용자(및 API를 설계하고 있는 경우 다른 프로그래머)를 방지하기 위해Role
컨스트럭터를 하여 '에'라고 하면 됩니다.private
.
다음 두 가지 방법으로 해결했습니다.
컬럼을 아이디로
int
ID에서 autogenerate를 사용하는 경우 ID 설정기에서 값을 할당하지 마십시오.일부 매핑을 할 경우 자동 생성된 ID가 허용되지 않을 수 있습니다.(이유는 모르겠습니다)
를
@GeneratedValue(strategy=GenerationType.SEQUENCE)
수 있으면
숫자 ID 값의 유형이 일치하지 않을 때 H2 데이터베이스에서 이 오류가 발생했습니다.SQL 문의 수를 통해 생성 및 채워진 테이블로 id를 INT로 설정합니다. 나중에 엔티티 Java 클래스를 만들고 id를 Long으로 설정합니다.Java 클래스의 ID 유형을 조정한 후 문제가 해결되었습니다.
JSON 등의 방법으로 ID 값을 수동으로 지정하려면 U_id 변수 앞에 @JsonProperty("U_id") 표기법을 추가합니다.
UI에서 ID(프라이머리 키)를 전달해야 합니다.저장하는 옵서버 또는 saveOrUpdate 메서드를 사용하는 경우 저장 또는 갱신합니다.
entity.hbm.xml의 클래스 필드 값을 다음과 같은 ID 또는 시퀀스로 변경합니다.
<hibernate-mapping>
<class name="models.Manager" table="Managers">
<id name="id">
<generator class="identity"></generator>
</id>
<property name="name"></property>
<property name="surname"></property>
<property name="department"></property>
<property name="project_id"></property>
</class>
엔티티 ID에 대한 다음 코드가 아직 없는 경우 추가합니다.
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
그것은 나에게 효과가 있었다.
다른 시나리오에서도 같은 에러가 발생.이 경우 테이블의 기본 키가 VARCHAR 값이기 때문에 엔티티 클래스(Entity1)의 ID는 String 값이며 auto generate로 설정할 수 없습니다.또한 이 엔티티는 다른 엔티티(Entity2)와 결합합니다.
Entity2를 갱신하고 save()를 호출할 때 Entity1의 값을 empty로 설정하면 이 예외가 느려집니다.ID에 대한 빈 문자열 설정이 작동하지 않습니다.
Entity2 e2 = new Entity2();
Entity1 e1 = new Entity1();
e1.setId("");
e2.setEntity1(e1);
session.update(e2);
ID가 작동하지 않는 경우에도 null을 설정합니다.
Entity2 e2 = new Entity2();
Entity1 e1 = new Entity1();
e1.setId(null);
e2.setEntity1(e1);
session.update(e2);
이렇게 하는 거야.
Entity2 e2 = new Entity2();
e2.setEntity1(null);
session.update(e2);
엔티티 클래스 내에 ID 필드 위에, getter 메서드 위에 각각 2개의 ID 주석이 있었기 때문에 이 문제가 발생하였습니다.
따라서 ID 필드 위에 ID 주석이 하나만 있는지 확인합니다.
언급URL : https://stackoverflow.com/questions/10997494/hibernate-error-ids-for-this-class-must-be-manually-assigned-before-calling-sav
'source' 카테고리의 다른 글
문자열에 처음 n자만 유지하시겠습니까? (0) | 2022.11.28 |
---|---|
php는 따옴표로 (101)를 삽입한다. (0) | 2022.11.28 |
Larabel 5.1에서 데이터베이스 내의 테이블리스트를 가져오는 방법 (0) | 2022.11.28 |
단일 페이지 응용 프로그램: 장점과 단점 (0) | 2022.11.28 |
과도한 요소를 제거하는 고정 크기의 큐가 있습니까? (0) | 2022.11.28 |