2015-08-26 2 views
0

У меня есть 2 человека. Пользователь:Почему отношение OneToOne не работает должным образом?

@Table(name = "USERS") 
@Entity 
public class User { 

    @Column(name = "user_id") 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 
    private String name; 
    private String email; 

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user") 
    private Authentication authentication; 
} 

и аутентификация:

@Table(name = "AUTHENTICATIONS") 
@Entity 
public class Authentication { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 
    @Column(name = "login_id") 
    private String loginId;//openId login 

    @JsonIgnore 
    private String password; 

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinColumn(name = "user_id") 
    private User user; 
} 

И у меня есть служба, которая обеспечивает регистрацию новых пользователей:

@Override 
@Transactional 
public User createUser(UserRegistrationForm form) { 
    Authentication authentication = new Authentication(); 
    authentication.setPassword(form.getPassword()); 
    User user = new User(); 
    user.setAuthentication(authentication); 
    user.setEmail(form.getEmail()); 
    user.setName(form.getLogin()); 
    authentication.setUser(user); 
    return userRepository.save(user); 
} 

И моя проблема заключается метод userRepository.save() возвращает бесконечно вложенным объектов:

{"id":1,"name":"myName","email":"[email protected]","authentication":{"id":1,"loginId":null,"user":{"id":1,"name":"myName","email":"[email protected]","authentication":{"id":1,"loginId":null,"user":{"id":1,"name":"myName","email":"[email protected]","authentication":{"id":1,"loginId":null,"user":{"id":1,"name":"myName","email":"[email protected]","authentication":{"id":1,"loginId":null,"user":{"id":1,"name":"myName","email":"[email protected]","authentication":{"id":1,"loginId":null,"user":{"id":1,"name":" 

Что я делаю неправильно? Помогите понять, как это должно работать.

ответ

2

это JSON, который возвращает вложенные объекты ... не ваш репозиторий!

Вы используете jackson? добавить @JsonManagedReference с одной стороны и @JsonBackReference на другом

+0

Спасибо, он работает. – Haygo

+0

никаких проблем;) ... можете ли вы, пожалуйста, принять ответ? это может быть полезно для других – Pras

1

Ваша проблема:

user.setAuthentication(authentication); 
... 
    authentication.setUser(user); 

Вы вложенную ссылку между user и authentication

+0

Спасибо, что получили поддержку. Как я могу сохранить пользователя и назначить его собственный объект auth в БД? – Haygo

Смежные вопросы