2012-03-14 4 views
1
@ManagedBean 
@SessionScoped 
public class User { 
private Person person; 
... 

user.hbm.xml하이버 네이트 대신

<hibernate-mapping> 
    <class name="entry.User" table="users"> 
     <id name="usaa"> 
      <generator class="increment"/> 
     </id> 
     <property name="username" column="username"/> 
     <property name="password" column="password"/> 
     <property name="enabled" column="enabled"/> 

     <many-to-one name="person" class="entry.Person" column="perid" not-null="true" cascade="all" unique="true"/>    
    </class> 
</hibernate-mapping> 

Person.hbm.xml로를

<hibernate-mapping> <class name="entry.Person" table="person"> <id name="id" column="perid"> <generator class="increment"/> </id> <property name="firstName" column="firstname"/> <property name="lastName" column="lastname"/> <property name="middleName" column="middlename"/> <property name="dob" column="dob"/> </class> </hibernate-mapping> 

을 업데이트의 DB에 삽입 된 일대일 관련 엔티티

따라서, one-to-one 위의 관계를 설계했습니다.

제대로 작동 DAO 방법 : Person는 DB 자동으로 also.It의 확인에 삽입되어 있는지User가 DB에 삽입

public void createUser(User user) { 
user.setPerson(new Person()); 
getHibernateTemplate().save(user); 
.. 

.

예기치 않게 작동 DAO 방법 : UserPerson 데이터로 업데이트 될 때

public void editUser(User user, Person person) { 
user.setPerson(person); 
getHibernateTemplate().update(user); 
... 

문제가 발생 하였다.

새 사용자 ID가 생성되고 새 행 하나가 Person 테이블에 삽입되었습니다..

어떻게 하시겠습니까? Person 해당 행 업데이트가 삽입되지 않았습니까?

도움 주셔서 감사합니다.

가정 :

나는 가정, 그 문제는 개체를 참조 할 때 id들 autoincrementing입니다.
update 또는 saveOrUpdate 메서드 호출의 경우에는 자동 증가를 피해야합니다.
엔티티가 처음 생성되어 DB에 삽입 될 때 자동 증가가 호출되어야합니다.

귀하의 가정이 정확

답변

2

,

그것은 autoincrementing 업데이트하거나 될 saveOrUpdate 메서드 호출의 경우에는 피해야한다처럼 보인다. 엔티티가 처음 생성되어 DB에 삽입되면 자동 증가가 호출되어야합니다.

하기 약이 모든,이 작업을 수행하는 간단한 규칙을 사용하는 최대 절전 모드, 객체의 ID가이 업데이트를 발사 다른 값의 경우에 삽입 쿼리를 발생 null의 경우 wroory 필요가 없습니다 해당 값이 인 쿼리.

사용자를 저장하기 전에 person ID를 oldPersonId로 설정하십시오.

public void editUser(User user, Person person) { 
person.SetId(oldPersonId); 
user.setPerson(person); 
getHibernateTemplate().update(user); 

이렇게하면 삽입 대신 업데이트 쿼리가 실행됩니다.

+0

답장을 보내 주셔서 감사합니다. 'oldPersonId'를 어디서 얻을 수 있는지 이해할 수 없습니다. – sergionni

+0

ManuPK, 고마워요, 요점을 이해하고, 굵은 글씨로 입력했습니다.))) – sergionni

관련 문제