2016-03-23 8 views
0

私はangularjs/Spring/Hibernateアプリケーションを持っていますが、私はangularjsとサーバー側のやり取りにRESTサービスを使用しています。 私はDBに1人のユーザを残したいので、これは私のangularjs側に見えます。AngularJsオブジェクトからHibernateエンティティへ

createUser: function(user){ 
      var userToSend = { 
         "firstName" : user.firstName, 
         "lastName" : user.lastName, 
         "homeAddress.location" : user.homeAddress.location , 
         "email" : user.email, 
         "ssoId": user.ssoId 
       }; 
        var a= $http.post('http://localhost:8080/MyDirectory/createUser/', userToSend) 
          .then(
            function(response){ 
             $rootScope.refresh(); 
             return response.data; 
            }, 
            function(errResponse){ 
             window.alert(errResponse); 
             console.error('Error while creating user'); 
             return $q.reject(errResponse); 
            } 
          ); 

          return null; 
      }, 

私のサーバ側はこれです:

@Transactional(propagation = Propagation.REQUIRED) 
    public void saveUser(User user) { 
     Long nextLong = RandomUtils.nextLong(0, 10000L); 
     // user.setId(nextLong.intValue()); 
     User merge = em.merge(user); 
     System.out.println(" merged "); 
     em.persist(merge); 

     System.out.println(""); 
    } 

と、これは私のユーザーとhomeaddressエンティティである:私はhomeaddressを持っていない場合

@Entity 
@Table(name = "DIR_USER") 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id = 1; 

    @Column(name = "SSO_ID", unique = true, nullable = false) 
    private String ssoId; 

    @NotEmpty 

    private String firstName; 

    @NotEmpty 
    @Column(name = "LAST_NAME", nullable = false) 
    private String lastName; 

    @NotEmpty 
    @Column(name = "EMAIL", nullable = false) 
    private String email; 

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    private Set<UserInscription> userInscription = new HashSet<UserInscription>(); 

    @OneToOne 
// @JsonManagedReference 
    private HomeAddress homeAddress; 

    public Set<UserInscription> getUserInscription() { 
     return userInscription; 
    } 

    public void setUserInscription(Set<UserInscription> userInscription) { 
     this.userInscription = userInscription; 
    } 

    // @JsonIgnore 
    public HomeAddress getHomeAddress() { 
     return homeAddress; 
    } 

    public void setHomeAddress(HomeAddress homeAddress) { 
     this.homeAddress = homeAddress; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getSsoId() { 
     return ssoId; 
    } 

    public void setSsoId(String ssoId) { 
     this.ssoId = ssoId; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    @JsonIgnore 
    public Set<UserInscription> getUserDocuments() { 
     return userInscription; 
    } 

    public void setUserDocuments(Set<UserInscription> UserInscriptions) { 
     this.userInscription = UserInscriptions; 
    } 

    @Override 
    public String toString() { 
     return "User [id=" + id + ", ssoId=" + ssoId + ", firstName=" + firstName + ", lastName=" + lastName 
       + ", email=" + email + "]"; 
    } 

} 







@Entity 
public class HomeAddress implements Serializable { 

    private static final long serialVersionUID = 1L; 

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

    private String email; 
    @OneToOne 
    private Country country; 
    private String location; 
    @JsonBackReference 
    @OneToOne 
    private User relatedUser; 

    public User getRelatedUser() { 
     return relatedUser; 
    } 

    public void setRelatedUser(User relatedUser) { 
     this.relatedUser = relatedUser; 
    } 

    public Country getCountry() { 
     return country; 
    } 

    public void setCountry(Country country) { 
     this.country = country; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

} 

は今value.Itが正常に動作しますホームアドレスはOneToOneです。この例外が発生します:

23-Mar-2016 11:35:00.081 WARNING [http-nio-8080-exec-33] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNotReadable Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unrecognized field "homeAddress.location" (class com.directory.model.User), not marked as ignorable (7 known properties: "lastName", "homeAddress", "ssoId", "id", "firstName", "email", "userInscription"]) 
at [Source: [email protected]; line: 1, column: 61] (through reference chain: com.directory.model.User["homeAddress.location"]); nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "homeAddress.location" (class com.directory.model.User), not marked as ignorable (7 known properties: "lastName", "homeAddress", "ssoId", "id", "firstName", "email", "userInscription"]) 
at [Source: [email protected]; line: 1, column: 61] (through reference chain: com.directory.model.User["homeAddress.location"]) 
このような

答えて

1

ポストそれを:あなたとJS/Javaでそれを使用することができたとしても

var userToSend = { 
         "firstName" : user.firstName, 
         "lastName" : user.lastName, 
         "homeAddress":{location : user.homeAddress.location}, 
         "email" : user.email, 
         "ssoId": user.ssoId 
       }; 

""これはJSONの構築方法ではありません。 Jsonはオブジェクトであり、サブオブジェクトはiが投稿したように定義する必要があります。

+0

ありがとうございました – BenMansourNizar