2017-12-13 4 views
0

주소와 함께 사용자 개체를 저장하려고했습니다. User 클래스 안에는 Address과의 관계가 정의되어 있습니다. 안에 Address, 나는 User을 정의했다. 다음과 같은 오류 객체를 생성하고 데이터베이스에 저장하려고하면 얻을중첩 된 관계 엔티티에서 Null 값 전달 - 스프링 부트

:

SqlExceptionHelper : ERROR: null value in column "user_id" violates not-null constraint

@Entity 
class Address { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    private String address; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "user_id") 
    private User user; 

    //getter setter 
} 

사용자 클래스를;

class User implements UserDetails { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @OneToMany(cascade = CascadeType.ALL) 
    private List<Address> address; 

    //Other fields, getters, & setters 
} 

UserService 클래스;

class UserService { 

    public long createUser(User user) { 

     User u = new User(); 
     Address address = new Address(); 
     address.setAddress("Windsong Palace"); 
     address.setZipCode("239749"); 

     List<Address> adds = new ArrayList<>(); 
     adds.add(address); 

     u.setAddress(adds); 
     //userRepository is the interface extends from JpaRepository<User, Long> 
     userRepository.save(u); 
    } 
} 

어떻게 Address 클래스에 생성 된 후 user_id를 전달하는 방법?

+0

사용자를 영속화 할 때 관련 주소 개체와 관계를 유지해야합니다. 그리고 지금까지 엔티티 매핑이 잘 보입니다. 너는 무엇을 놓치고 있니? 무슨 일 이니? –

+0

나는 liquibase가 문제를 일으킨다는 것을 몰랐다. 나는 liquibase를 사용할 때, 나는 그 문제를 해결했다. – mubeen

+0

great. 다른 사람들이 혼동하지 않도록이 결과에 대한 자신의 질문에 답하면 더 좋습니다. –

답변

2

오류는 주소 개체에 사용자 개체에 대한 참조가 없음을 나타냅니다.

코드를 보면 주소 필드에 대한 사용자를 설정하지 않습니다. 이것을 시도하십시오 :

... 
address.setAddress("Windsong Palace"); 
address.setZipCode("239749"); 
address.setUser(u); 
... 
0

문제점을 파악합니다. 그것은 liquibase로 인한 것입니다. 내 응용 프로그램과 함께 liquibase를 사용하고있었습니다. liquibase xml 파일에서 테이블 User, Address을 만들었습니다. application.properties에서 spring.jpa.hibernate.ddl-auto=none.

하지만 사용자 및 주소를 만들 때. 저장소 saveAddressuser_id을 삽입 할 수 없으므로 null을 삽입했습니다.

liquibase.enabled=false (liquibase 제거)이 문제를 해결했습니다.

나는 이것이 더 나은 해결책이 아니라고 생각합니다. 그러나, 그것없이 작동 liquibase.

관련 문제