Hibernate를 사용하여 관련 Null 객체로 엔티티를 저장하는 방법

부카 로프 세르게이

Hibernate Entity에 대해 Null Object 패턴 을 구현하고 싶습니다 .

필드 가있는 Person엔티티가 있다고 가정 해 봅시다 Address. 어떤 경우에는 사람의 주소가 정의되어야하고 다른 경우에는 정의되지 않을 수 있습니다.

@Entity
class Person {

    String name;

    @ManyToOne(targetEntity = Address.class)
    IAddress address;

    public Person(String name, IAddress address) {
        this.name = name;
        this.address = address;
    }
}

interface IAddress {

    String getCity();

    String getStreet();
}

@Entity
class Address implements IAddress {

    @Id
    private Integer id;

    private String city;

    private String street;

    public Address(String city, String street) {
        this.city = city;
        this.street = street;
    }

    @Override
    public String getCity() {
        return city;
    }

    @Override
    public String getStreet() {
        return street;
    }
}

class NullObjectAddress implements IAddress {

    @Override
    public String getCity() {
        return "London";
    }

    @Override
    public String getStreet() {
        return "Baker street";
    }
}

사람을 구하려고

Person per1 = new Person("Jhon Doe", new Address("Huge village", "main street"));
personRepository.save(per1); //that`s ok

Person per2 = new Person("Jhon Doe", new NullObjectAddress());
personRepository.save(per2); //throws exception

예외는 다음과 같습니다.

org.springframework.orm.jpa.JpaSystemException : 영구 속성 [Person # id]에 대한 리플렉션으로 [private Address.id] 필드에 액세스하는 동안 오류가 발생했습니다. NullObjectAddress @ 3638120f; 중첩 된 예외는 org.hibernate.property.access.spi.PropertyAccessException입니다. 영구 속성 [Person # id]에 대한 리플렉션으로 [private java.lang.Int Person.id] 필드에 액세스하는 동안 오류가 발생했습니다. : NullObjectAddress @ 3638120f

드라간 보자 노 비치

쉬운 방법은 null필드 값 에 사용 하고 getter 및 setter에서 null 개체를 처리하는 것입니다.

@Entity
class Person {

    @ManyToOne(targetEntity = Address.class)
    IAddress address;

    public Person(String name, IAddress address) {
        this.name = name;
        setAddress(address);
    }

    public IAddress getAddress() {
        return address == null ? NullObjectAddress.INSTANCE : address;
    }

    public void setAddress(IAddress address) {
        this.address = address instanceof NullObjectAddress ? null : address;
    }
}

그러나 JPQL / HQL 쿼리에서는 여전히이를 nullable로 처리해야합니다. 예를 들어 인스턴스 값을 갖는 매개 변수 address is (not) null대신 사용해야 합니다.address = :address:addressNullObjectAddress

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다 대다 관계와 관련된 하나의 조치로 여러 엔티티를 저장하는 방법 [Spring Boot 2, JPA, Hibernate, PostgreSQL]

분류에서Dev

linq를 엔티티에 사용하여 관련 엔티티를 기반으로 레코드 가져 오기

분류에서Dev

관련 엔터티의 명시 적로드와 함께 'AsNoTracking'메서드를 사용하여 EF Core에 엔터티를로드하는 방법

분류에서Dev

Entity Framework를 사용하여 특정 엔터티에 대한 특정 관련 엔터티를 명시 적으로로드하는 방법은 무엇입니까?

분류에서Dev

in Include를 사용하여 관련 데이터 엔티티 ef Core 3.1로드

분류에서Dev

spring data neo4j를 사용할 때 관련 객체 ID로 엔티티를 얻는 방법은 무엇입니까?

분류에서Dev

교리와 함께 이벤트 리스너를 사용하여 관련 엔티티를 변경하는 방법

분류에서Dev

핵심 데이터 : 관련 엔티티의 속성을 기반으로 엔티티를 가져 오는 방법

분류에서Dev

관련 데이터로 엔티티 프레임 워크 핵심 데이터를 시드하는 방법

분류에서Dev

세션에 저장된 엔티티를 새 엔티티로 전달하는 방법

분류에서Dev

Entity Framework 포함 된 관련 엔터티를 사용하여 엔터티를 json으로 직렬화

분류에서Dev

Entity Framework + OData를 사용하여 여러 관련 엔터티를 게시하는 방법은 무엇입니까?

분류에서Dev

Hibernate 매핑을 사용하여 엔티티 간의 관계를 조정하는 방법은 무엇입니까?

분류에서Dev

EntityFramework를 사용하여 리포지토리에 관련 엔터티로드

분류에서Dev

loopback.io를 사용하여 REST에 관련 엔터티를 포함하는 방법

분류에서Dev

typeorm을 사용하여 객체를 전달하는 엔티티를 초기화하는 방법

분류에서Dev

JPA / Hibernate 엔티티의 특정 필드를 다른 엔티티로 결합하는 방법

분류에서Dev

, JPA 봄 부트를 이용하여 참조 엔티티 관련

분류에서Dev

linq 및 관련 엔티티를 사용하여 엔티티 프레임 워크 7에 쿼리

분류에서Dev

Entity Framework 5-Include를 사용하여 관련 엔터티를로드하는 필터 적용

분류에서Dev

Entity Framework 5-Include를 사용하여 관련 엔터티를로드하는 필터 적용

분류에서Dev

Entity Framework를 사용하여 모든 관련 엔터티 반환

분류에서Dev

Doctrine 사용자 정의 저장소를 확장하고 doctrine 엔티티 관리자에서 확장 저장소를 호출하는 방법

분류에서Dev

Lightswitch에서 외부 데이터 소스의 관련 엔터티를로드하는 방법 (Visual Studio 2013)

분류에서Dev

장고 관련 필드를 기반으로 객체를 주문하는 방법

분류에서Dev

Hibernate는 SQL 서버 데이터베이스에 관련 엔티티를 저장하지 않습니다.

분류에서Dev

Symfony2는 ManyToMany 관계를 사용하여 반전 된 엔티티에서 객체를 가져옵니다.

분류에서Dev

AutoMapper를 사용하여 다 대다 관계 테이블의 관계 테이블 정보를 엔티티 모델 클래스로 매핑하는 방법

분류에서Dev

엔티티 관리자없이 JPA setMaxResults () (LIMIT 20)를 사용하는 방법?

Related 관련 기사

  1. 1

    다 대다 관계와 관련된 하나의 조치로 여러 엔티티를 저장하는 방법 [Spring Boot 2, JPA, Hibernate, PostgreSQL]

  2. 2

    linq를 엔티티에 사용하여 관련 엔티티를 기반으로 레코드 가져 오기

  3. 3

    관련 엔터티의 명시 적로드와 함께 'AsNoTracking'메서드를 사용하여 EF Core에 엔터티를로드하는 방법

  4. 4

    Entity Framework를 사용하여 특정 엔터티에 대한 특정 관련 엔터티를 명시 적으로로드하는 방법은 무엇입니까?

  5. 5

    in Include를 사용하여 관련 데이터 엔티티 ef Core 3.1로드

  6. 6

    spring data neo4j를 사용할 때 관련 객체 ID로 엔티티를 얻는 방법은 무엇입니까?

  7. 7

    교리와 함께 이벤트 리스너를 사용하여 관련 엔티티를 변경하는 방법

  8. 8

    핵심 데이터 : 관련 엔티티의 속성을 기반으로 엔티티를 가져 오는 방법

  9. 9

    관련 데이터로 엔티티 프레임 워크 핵심 데이터를 시드하는 방법

  10. 10

    세션에 저장된 엔티티를 새 엔티티로 전달하는 방법

  11. 11

    Entity Framework 포함 된 관련 엔터티를 사용하여 엔터티를 json으로 직렬화

  12. 12

    Entity Framework + OData를 사용하여 여러 관련 엔터티를 게시하는 방법은 무엇입니까?

  13. 13

    Hibernate 매핑을 사용하여 엔티티 간의 관계를 조정하는 방법은 무엇입니까?

  14. 14

    EntityFramework를 사용하여 리포지토리에 관련 엔터티로드

  15. 15

    loopback.io를 사용하여 REST에 관련 엔터티를 포함하는 방법

  16. 16

    typeorm을 사용하여 객체를 전달하는 엔티티를 초기화하는 방법

  17. 17

    JPA / Hibernate 엔티티의 특정 필드를 다른 엔티티로 결합하는 방법

  18. 18

    , JPA 봄 부트를 이용하여 참조 엔티티 관련

  19. 19

    linq 및 관련 엔티티를 사용하여 엔티티 프레임 워크 7에 쿼리

  20. 20

    Entity Framework 5-Include를 사용하여 관련 엔터티를로드하는 필터 적용

  21. 21

    Entity Framework 5-Include를 사용하여 관련 엔터티를로드하는 필터 적용

  22. 22

    Entity Framework를 사용하여 모든 관련 엔터티 반환

  23. 23

    Doctrine 사용자 정의 저장소를 확장하고 doctrine 엔티티 관리자에서 확장 저장소를 호출하는 방법

  24. 24

    Lightswitch에서 외부 데이터 소스의 관련 엔터티를로드하는 방법 (Visual Studio 2013)

  25. 25

    장고 관련 필드를 기반으로 객체를 주문하는 방법

  26. 26

    Hibernate는 SQL 서버 데이터베이스에 관련 엔티티를 저장하지 않습니다.

  27. 27

    Symfony2는 ManyToMany 관계를 사용하여 반전 된 엔티티에서 객체를 가져옵니다.

  28. 28

    AutoMapper를 사용하여 다 대다 관계 테이블의 관계 테이블 정보를 엔티티 모델 클래스로 매핑하는 방법

  29. 29

    엔티티 관리자없이 JPA setMaxResults () (LIMIT 20)를 사용하는 방법?

뜨겁다태그

보관