2014-08-22 1 views
0

최대 절전 모드에서 개체의 지속성에 대한 질문이 있습니다.컬렉션에서 요소의 지속성을 최대 절전 모드로 전환합니다.

컨텍스트 내가 여러 역할이있는 사용자 가지고있다 : 나는

싶습니다
public class ShopDaoImpl implements ShopDAO{ 

    @PersistenceContext 
    private EntityManager em; 

    @Override 
    public void attribuerRole(Role r, Long userID) { 
     User u = em.find(User.class, userID); 
     u.getRoles().add(r); 
     em.persist(r); 

    } 
} 

이유 undersand하는 DaoImpl에서 사용자에게 다른 역할을 추가 할

@Entity 
@Table(name="users") 
public class User implements Serializable { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="user_id") 
    private Long idUser; 

    @OneToMany 
    @JoinColumn(name="user_id") 
    private Collection<Role> roles; 

} 

를 I 역할 r (persist와 함께) 만 저장하면됩니다. 예를 들어 사용자를 업데이트 할 필요가 없습니다 (em.merge (u)). 사용자를 수정했지만 (콜렉션 역할에서 역할 추가)

답변

1

관리 객체에 대한 변경 사항은 Hibernate에 의해 자동으로 영구 저장됩니다. Hibernate는 세션에서 관리 객체에 대한 참조를 유지하고 트랜잭션을 커밋하기 전에 세션의 엔티티가 수정되었는지를 검사한다. 변경된 경우 해당 SQL 쿼리를 실행하여 변경 내용을 데이터베이스에 씁니다.

트랜잭션이 커밋되기 전에도 발생할 수 있습니다. flush()를 호출하거나 쿼리가 실행될 때 (쿼리가 실행되기 전에 데이터베이스가 수정되었는지 확인하기 위해)입니다.

관리 대상 엔티티 란 무엇입니까?

  • 당신이 최대 절전 모드에서 얻을 실체 : 발견() 또는의 getReference을 (호출하여 개체를 반환하는 쿼리를 실행하여) 나) (병합, 또는 다른 관리 기관으로부터 협회 (반환합니다 예를 들어 user.getRoles()을 통해 이동하여 사용자가 관리되는 경우 관리되는 엔터티)
  • persist()으로 전달한 항목.

의 모습을 사용자 필드 위에 일부 setings가있는 경우 http://docs.jboss.org/hibernate/core/4.3/manual/en-US/html_single/#objectstate-overview

+0

감사합니다. JB Nizet! – stackSaru

1

보고, 당신의 역할 클래스 매핑을 확인을 참조하십시오 : 예, 그것은 의미 경우 역할을 계속 될 경우 ManyToOne(cascade=CascadeType.XXX)을, 사용자는 자동으로 지속됩니다 최대 절전 모드.

관련 문제