우리는 도메인 클래스과 같이이 제거 _idx 조정하려면 Grails는 데이터가
class Attribute {
List attributeParameters = []
static hasMany = [attributeParameters: AttributeParameter]
}
AttributeParameter
Attribute
에 속한다. 여기에 정의 된 몇 가지 다른 관계가 있으며 여러 속성에서 여러 AttributeParameters를 삭제해야하는 경우가 있습니다. 그래서 우리는이 일을하고 있습니다 : 작동
def parameters = AttributeParameter.findAllBySomeOtherCriteria(foo)
parameters*.delete()
은, 그러나, 순서가 도착 attribute_parameters_idx
라는 attribute_parameter의 열이 있습니다. 이 열은 컬렉션을 목록으로 정의했기 때문에 존재합니다. 그리고 우리가 attribute.removeFromAttributeParameters(ap)
일 경우, Grails는 자동으로이 열을 조정합니다. 그러나 우리는 데이터를 그런 방식으로 제거하지 않으므로 순서가 어긋납니다.
이 경우 속성에서 컬렉션을 반복 할 때 null 값이 반환됩니다. 캐시 문제가 아니거나 상위 문제를 새로 고치는 것입니다. 어떤 일이 발생합니까?
attribute.attributeParameters.each { }
내부적으로 _idx 값에 기반한 반복에서 추가 행을 추가하는 중입니다. 그 행 중 하나 이상이 누락되어 있기 때문에 Grails는 Collection에 null 행을 추가합니다. 디버깅 할 때 이것을 볼 수는 없지만 반복이 일어나는대로 볼 수 있습니다.
는 마지막 질문입니다 내 :
- 는 특정 모음에 대한 _idx 값을 업데이트하는 Grails에 알려줄 수있는 방법이 있나요 및
- 하지 않을 경우이 _idx 열을 얻을 수정할 수있는 방법이 있나요 그 값은 수동으로 Gorm을 통해
좋은 접근 방법입니다. 우리는 List를 모두 버리고 결국 제어 된 sequenceNumber 열을 가진 세트로 돌아갈 것이라고 생각합니다. 그러나 이것은 일시적으로 우리를 얻을 것입니다. 감사. – Gregg