以下の関係を参照してください:は、Hibernate JPAにはトリガされません
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
}