최대 절전 모드의 해시 맵에서 항목을 제거하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1902256

문제

최대 절전 모드로 해시 맵에서 항목을 삭제하려고합니다.

다음은 컬렉션에 대한 내 구성입니다.

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@OneToMany(mappedBy = "game", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@Where(clause = "charactType='charact'")
@MapKey(name = "shortcut")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public Map<String, Characteristic> getCharacteristics()
{
    return characteristics;
}

public void setCharacteristics(Map<String, Characteristic> characteristics)
{
    this.characteristics = characteristics;
}

동일한 개체에서 내 기능을 제거합니다.

@Transactional
public void removeCharacteristic(Characteristic charact)
{
    // getCharacteristics().size();

    getCharacteristics().remove(charact.getShortcut());
}

removeCheCharacteristic을 사용해도 데이터베이스에서 항목을 삭제하지 않습니다. 목록의 크기 (컬렉션의로드 강제로드)를 얻기 위해 라인을 무너 뜨리면 레코드가 잘 삭제됩니다.

문제는 무엇입니까? 전체 컬렉션의로드를 강요하지 않고 어떻게 달성 할 수 있습니까?

편집 : 나는 맵을 목록으로 바꾸고 매력처럼 실행됩니다 (size () 함수로 이전에로드하지 않고) ... 이것은 매우 이상합니다 ... 그래서 내 문제는 목록과 함께 해결되었지만 i ' 왜 그것이 실행되지 않는지 알고 싶습니까?

도움이 되었습니까?

해결책 3

이것은 최대 절전 모드 버그였습니다. 이제 새로운 버전으로 고정되었습니다.

다른 팁

컬렉션을 명시 적으로 설정해보십시오. 예를 들어

c = getCharacteristics();
c.remove(...);
setCharacteristics(c); 

대신 목록을 사용할 때 작동한다고 말 했으므로 맵의 .remove () 함수를 잘못 사용 할 수 있습니까?

.remove () 함수는 맵에서 기능합니다 물체의 키를 취합니다 제거하고 싶고 실제 물체가 아닙니다.

myMap.remove(MyObject.getKey()); //Or however you would get the key

목록의 .remove () 함수 대상을 취합니다 당신이 제거하고 싶다는 것;

myList.remove(MyObject); 

편집하다:나는 당신이 그 한 줄을 타협하면 올바르게 작동하므로 적용되지 않을 가능성이 높습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top