2017-02-26 2 views
0

다음과 같은 관계를 참조하십시오하이버 네이트 JPA에 트리거되지

relations

RECIPE_USERCATEGORY_REL 내가 psql의 콘솔에서 다음 명령을 실행한다면, 그래서 ruc_ucat_category의 값 것, ON UPDATE CASCADE 트리거가 테이블 또한 자동으로 업데이트됩니다.

update usercategory set ucat_category = 'OldCategory' where ucat_category = 'NewCategory'; 

이것은 작동합니다. 문제는 현재 최대 절전 모드입니다. 내 서비스 클래스에서이 방법이 있습니다

public void renameCategory(String userId, String fromCategory, String toCategory) 
{  
    TypedQuery<UserCategory> query = entityManager.createNamedQuery("UserCategory.findAllCaseSensitiveByUserIdAndPrefix", UserCategory.class); 
    query.setParameter(ApplicationConstants.PARAM_USER_ID, userId); 
    query.setParameter("category", fromCategory); 
    List<UserCategory> resultList = query.getResultList(); 

    if (resultList == null || resultList.isEmpty()) 
    { 
     return; 
    } 

    UserCategory userCategory = resultList.get(0); 
    userCategory.setCategory(toCategory);   
} 

내가 userCategory이 값이 있는지 확신 할 수 있습니다 'OldCategory'. 데이터베이스의 트리거가 관계 테이블의 값을 업데이트해야하기 때문에 업데이트가 작동해야한다고 생각하지만 아무 일도 일어나지 않습니다. 이게 왜 그렇게?
추가 정보 : ->RECIPE_USERCATEGORY_REL 관계 (에서만 RECIPE < - 그것이>RECIPE_USERCATEGORY_REL 관계) 내 엔티티에서 USERCATEGORY <에는 @OneToMany@ManyToOne 선언이 없습니다. 이는 RECIPE_USERCATEGORY_REL이 실제 조인 테이블이 아니기 때문입니다. USERCATEGORY은 증가하는 조회 테이블과 유사하므로 최대 절전 모드 이 워크 플로를 방해하지 않아야합니다. USERCATEGORY < ->RECIPE_USERCATEGORY_REL의 유일한 관계는 데이터베이스의 참조 무결성입니다.

는 기업의 모습이지만, 내가 말했듯이, Hibernate는이 관계에 대해 알아서는 안 이후 범주 테이블에는 최대 절전 관계가 없다 :

@Table(name = "RECIPE_USERCATEGORY_REL") 
public class RecipeUserCategoryRel implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    private RecipeUserCategoryRelPk recipeUserCategoryRelPk = new RecipeUserCategoryRelPk(); 

    @MapsId("rcpId") 
    @ManyToOne 
    @JoinColumn(name = "ruc_rcp_id", referencedColumnName = "rcp_id", insertable = false, updatable = false) 
    private Recipe recipe; 

... 
} 

및 ...

@Embeddable 
public class RecipeUserCategoryRelPk implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @Column(name = "ruc_rcp_id") 
    private Long rcpId; 

    @Column(name = "ruc_ucat_category") 
    private String category; 

    @Column(name = "ruc_ucat_acc_identifier") 
    private Long identifier; 

    public RecipeUserCategoryRelPk() 
    { 
    } 
... 
//getters, setters, hashcode, equals 
} 

답변

0

다른 게시물에서 JPA에서 기본 키를 변경할 수 없다고 읽었습니다. 그러나 나의 유스 케이스는 확실히 기본 키를 변경하고 있지만, 제 경우에는 일반적인 유스 케이스가 아니며 애플리케이션의 '진짜'부분도 아니지만 사용자가 오래된 데이터를 수정해야하는 경우가 있으므로 제공해야합니다. 이 기능. (임시 해결 방법으로 기본 업데이트 쿼리를 만들었습니다)