gpt4 book ai didi

java - 将 AngularJs 对象映射/导航到 Hibernate 实体

转载 作者:行者123 更新时间:2023-12-01 10:10:06 25 4
gpt4 key购买 nike

我有一个 AngularJS/Spring/Hibernate 应用程序,并且我正在使用 REST 服务来进行 AngularJS 和服务器端之间的交互。我想将一个用户保留到数据库,所以这就是我的 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;
},

我的服务器端是这样的:

@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("");
}

这是我的用户和家庭地址实体:

@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;
}

}

现在,如果我没有 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"])

最佳答案

像这样发布:

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

即使你可以在 JS/Java 中使用“.” JSON 不是这样构建的。 Json 是对象,子对象必须像我发布的那样定义。

关于java - 将 AngularJs 对象映射/导航到 Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36172347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com