은 내가 사용 @GeneratedValue :JPA @GeneratedValue ID에 JPA에서
public class Sear {
public static void main(String[] args) throws Exception {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("testID");
EntityManager em = emf.createEntityManager();
Man man = new Man();
man.setId(-1L);
try {
em.getTransaction().begin();
em.persist(man);
em.getTransaction().commit();
} catch (Exception e) { }
if(man.getId() == -1);
}
}
}
:
@TableGenerator(name = "idGenerator", table = "generator", pkColumnName = "Indecator" , valueColumnName = "value", pkColumnValue = "man")
@Entity
@Table(name="Man")
public class Man implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "idGenerator")
@Column(name="ID")
private long id;
public void setId(Long i) {
this.id=i;
}
public Long getId(){
return id;
}
}
는 I는 초기 (나중에 테스트 조건으로서 사용하는) 어떤 임의의 값에 ID를 설정 commit()을 실행 한 후 man.id의 예상 값은 얼마입니까? 그것은 (-1), 새로 생성 된 값이어야합니까, 아니면 예외가 있어야합니까?
이 체크를 사용하여 지속되는 동안 예외를 감지하려고합니다.
그러나 변경 여부를 확인하기 위해이 값을 설정합니다. JPA 제공자가 새로 생성 된 값으로이 값을 대체하도록하는 구성이 있습니까? 또는 실제로이 작업을 수행하는 공급자가 있습니까?! 또는이 문제를 해결할 구성이 있습니까? eclipselink를 사용할 때 생성 된 값인 에 의해 재정의하지 않고 데이터베이스에서 -1을 유지했지만 최대 절전 모드를 사용할 때 예외가 발생했습니다. – user248230
이것은 JPA 스펙에 정의되어 있지 않으므로 아무 것도 기대하지 않습니다. 구현은 그 경우에 느껴지는 것을 할 수 있습니다. 행동을 지정하지 않는 것에 대한 비난. DataNucleus를 사용하면 값을 설정하고이 경우 필드 값을 생성하지 않을 수 있습니다. – DataNucleus
덕분에 많은 하지만 제발 "DataNucleus 값을 설정하고 해당 필드의 값을 생성 할 수 있습니다." 다른 공급자가 값을 설정하도록 허용하고 엔티티를 지속 할 때 새로운 값을 생성합니다. – user248230