2017-02-26 8 views
0

以下の関係を参照してください:は、Hibernate JPAにはトリガされません

relations

RECIPE_USERCATEGORY_REL私はpsqlのコンソールで次のコマンドを実行しますので、もし、ruc_ucat_categoryの値は意志、ON UPDATE CASCADEトリガーを持つテーブル自動的に更新されます。

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

これは機能します。 問題はHibernateになりました。私は自分のサービス・クラスでこのメソッドを持っている:

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 <に - それは>RECIPE_USERCATEGORY_REL関係)>RECIPE_USERCATEGORY_REL関係私のエンティティでは、USERCATEGORY <には@OneToMany@ManyToOne宣言はありません。これは、RECIPE_USERCATEGORY_RELが実際の結合テーブルではないためです。 USERCATEGORYは、ルックアップテーブルが増加しているのと似ていますので、Hibernate でワークフローを妨害してはいけません。 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で主キーの変更が許可されていないと読んでいます。しかし、私のユースケースではプライマリキーが確実に変更されていますが、私のケースでは一般的なユースケースではなく、アプリケーションの本当の部分でもありませんが、古いデータを変更する必要があるケースがあります。この機能。 (回避策として、ネイティブの更新クエリを作成しました)

関連する問題