請參閱以下關係:ON UPDATE CASCADE Hibernate的JPA不會觸發
表RECIPE_USERCATEGORY_REL
有ON UPDATE CASCADE
觸發,所以如果我想在PSQL控制檯執行以下命令,的ruc_ucat_category
值將也會自動更新。
update usercategory set ucat_category = 'OldCategory' where ucat_category = 'NewCategory';
This works。 現在的問題是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'。在我看來,更新應該是可行的,因爲數據庫的觸發器應該更新關係表的值,但沒有任何反應。這是爲什麼?
附加信息:在我的實體,沒有對USERCATEGORY
<沒有@OneToMany
和@ManyToOne
聲明 - >RECIPE_USERCATEGORY_REL
關係(僅適用於RECIPE
< - >RECIPE_USERCATEGORY_REL
關係是)。這是因爲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
}