[英]Mapping/Navigation AngularJs Object to Hibernate entity
I'm having an angularjs/Spring/Hibernate application and i'm using REST service for interaction between angularjs and server side. 我有一个angularjs / Spring / Hibernate应用程序,并且我正在使用REST服务在angularjs和服务器端之间进行交互。 I want to persist one user to DB so this is how looks my angularjs side.
我想将一个用户保留到数据库,所以这就是我的angularjs方面的样子。
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;
},
My server side is this : 我的服务器端是这样的:
@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("");
}
and this is my user and homeaddress entities: 这是我的用户和家庭住址实体:
@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;
}
}
Now if i don't have the homeaddress value.It works fine but with homeaddress which is a OneToOne .I'm getting this exception: 现在如果我没有homeaddress值。它可以正常工作,但homeaddress是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: java.io.PushbackInputStream@93d96d; 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: java.io.PushbackInputStream@93d96d; line: 1, column: 61] (through reference chain: com.directory.model.User["homeAddress.location"])
Post it like this : 像这样发布:
var userToSend = {
"firstName" : user.firstName,
"lastName" : user.lastName,
"homeAddress":{location : user.homeAddress.location},
"email" : user.email,
"ssoId": user.ssoId
};
Even though you can use it in JS/Java with "." 即使您可以在JS / Java中使用“。”来使用它。 this isn't how JSON is built.
这不是JSON的构建方式。 Json are object and sub objects must be define like i posted.
Json是对象,子对象必须像我发布的那样定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.