다음과 같은 관계를 참조하십시오하이버 네이트 JPA에 트리거되지
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
}