2010-06-11 7 views
7

최대 절전 모드 주석을 사용하고 있습니다. POJO 객체에 메소드를 추가하는 방법은 무엇입니까? 예를 들어, 데이터베이스와 관련된 "getChildNodes"메서드가 있지만 재귀 메서드 "getAllChildNodes"를 추가하고 싶습니다. 나는 "org.hibernate.PropertyNotFoundException : 클래스의 프로퍼티 진행에 대한 설정자를 찾을 수 없습니다"라는 오류 메시지가 나타납니다.Java, Hibernate annotations, POJO 객체에 메소드를 추가하는 방법은 무엇입니까?

+0

코드를 보여줍니다. – Bozho

답변

9

은 당신이 당신의 엔티티의 구조를 정의하는 두 가지 방법이 있습니다

+0

나는 혼란 스럽다. getAllChildNodes() 또는 publish()와 같은 추가 기능을 추가하지 않아도 더 이상 POJO가 아닌가? 따라서 POJO가되어야하는 최대 절전 모드 객체의 디자인 원칙을 위반하므로 "나쁜"것입니까? 그런데 왜 그렇게 나쁠까요? 나는 이것을하고 싶지만 그것이 올바른지 확신 할 수 없다. – pete

-1

.java 파일을 열고 getAllChildNodes()이라는 메서드를 작성하십시오.

Hibernate는 코드를 작성하지 않고 데이터베이스의 필드를 코드에 매핑합니다. 그게 다야. 속성에 대한 일반 getter 및 setter 외에도 도메인/모델 클래스에 추가 논리를 갖고 싶으면 직접 추가해야합니다. 내가으로 이것을 해석하면

1

getAllChildNodes() 방법에 @Transient 주석을 사용할 필요 "어떻게 지속성과 관련되지 않은 방법을 추가합니까" . 당신의 엔티티의 getter 메소드에 주석을 사용하여 인스턴스 엔터티의 변수 나

    • 사용하여 주석

    getter 메소드에 주석을 사용하여, Hibernate는 가정 그 모든의 getXXX (및 isXxx 부울 유형의 경우)은 지속적 등록 정보의 정의를 나타냅니다. 그리고 귀하의 경우처럼 특정 getter가 주석을 포함하지 않더라도 유지됩니다.

    Hibernate는 각 영속성 속성에 대해 일치하는 setter 메소드를 찾을 것으로 예상한다. 그리고 귀하의 경우에는 무엇이 빠졌고 예외가 발생합니다.

    사용자 정의 게터를 @Transient으로 지정하면이 문제를 해결할 수 있습니다.이 게터는 영구 속성을 나타내지 않습니다. 또 다른 방법은 엔티티를 인스턴스 변수에 대한 주석을 사용하도록 변환하는 것입니다. 후자는 내 개인적인 선택이 될 것입니다.

  • 관련 문제