2011-02-24 2 views
0

이것은 Hibernate와 PostgreSQL을 사용하는 JavaEE6 어플리케이션입니다. 사용자는 Long ID를 생성하는 @GeneratedValue(strategy = GenerationType.AUTO)으로 데이터베이스에 생성됩니다. user_name 열에있는 이름의 고유성을 보장 할 수 없기 때문에 데이터베이스의 user_id 열을 로그인 영역의 이름 열 (예 : request.login(id.toString(), password))로 사용하려고합니다. 그러나 Glassfishv3에서 기본 제공되는 FORM 인증을 사용하면 메커니즘에서 데이터베이스의 열이 var char이 될 것으로 예상하므로 실패합니다.
그래서 나는 사용자가 데이터베이스에 문자열 string_id가 생성 될 때 동시에 값을 채울 수있는 방법을 찾고 있는데,이 값은 문자열로 자동 변환 된 ID가됩니다. 후속 작업에서이 작업을 수행 할 수 있었지만이 작업을 한 번에 수행 할 수 있는지 궁금합니다. @PrePersist 시도했지만 ID가이 단계에서 생성 된 것 같습니다. 또는 더 똑똑한 방법으로 로그인을 수행 할 수 있습니까?생성시 idoth 컬럼에 복사 할 ID를 생성합니다.

감사합니다.

답변

0

당신은 한 번에 그것을 할 수 있습니다 - https://gist.github.com/786238

+0

그러나 복사

@Entity public class A { @Id @GeneratedValue(strategy=SEQUENCE) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } private Integer id; public String getName() { return name; } private void setName(String name) { this.name = name; } private String name; } Serializable id = em.unwrap(Session.class).save(a); a.setName("Why oh why redundancy? " + id); em.flush(); 

코드를 em.persist 이상 (a)는 이점이있다,이 a.setName (a.getId(). toString()); em.flush()? 왜 그걸 한 번 쐈어? – user244129