우리 팀에는 User
과 Store
의 두 클래스가 있고 JPA @ManyToMany
주석이 관련되어 있습니다. 관련 코드는 다음과 같습니다.JPA @ManyToMany 작성 중이지만 업데이트되지 않음
새 User
개체를 만들고 저장소를 설정하면 수명이 좋습니다. Struts 2/Spring 웹 UI를 통해 User 객체를 업데이트하려고 할 때 예기치 않은 동작이 발생합니다. JUnit을 통한 간단한 자동화 된 통합 테스트를 실행할 때 이러한 문제는 발생하지 않습니다.
간단히 말하면 User
을 저장할 때 저장소 컬렉션이 업데이트되지 않습니다. 데이터베이스에 변경 사항이 표시되지 않고 문제가있는 User
개체를 다시로드하면 저장소 집합이 변경되지 않은 것으로 나타납니다.
우리가이 문제에 대해 발견 한 유일한 해결책은 우리가이 솔루션을 좋아하지 않는다는 것입니다. 우리 팀의 모든 개발자가 기분이 좋지 않습니다. Store
의 새 Set
을 만든 다음 user.setStores(null)
을 수행 한 다음 user.setStores(stores)
을 수행하십시오.
OpenEntityManagerInViewFilter
을 사용하고 있습니다. JPA 프로 바이더로서 Hibernate를 사용하고 있습니다. 우리는 Spring의 JpaTransactionManager를 사용하고 있습니다. 우리는 코드에 @Transactional
어노테이션을 가지고 있지 않으며, 추가하면 다른 곳에서 설명한 프록시 동작으로 인해 기존 코드가 손상됩니다.
우리가 비 큐스 방식으로이 문제를 해결할 수있는 방법에 대해 알려줄 수있는 모든 통찰력을 환영합니다.
User.java 주요부 : Store.java의
@ManyToMany
@JoinTable(name = "company.user_store_access",
joinColumns = @JoinColumn(name = "userid"),
inverseJoinColumns = @JoinColumn(name = "storeid"))
public Set<Store> getStores() {
return stores;
}
주요부 : UserDetailAction.java의
@ManyToMany(mappedBy = "stores")
public List<User> getUsers() {
return users;
}
관련 부분 : (패스 - 스루 층 아래 또는 두 가지 : 그리고 나서 :)
entity = getEntityManager().merge(entity);
상점을 추가/수정하는 코드 줄을 추가 할 수 있습니까? –