我已使用GSON将JSON转换为POJO。 我正在使用JPA的save()方法将Employee实体对象存储到mysql中。但是我收到一个错误消息,提示“无法确定地址的类型”。那我该怎么办呢?
这是错误: 无法确定:地址的类型
Employee.java
package com.example.demo;
import java.math.BigDecimal;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import com.google.gson.annotations.Expose;
@Entity
public class Employee {
@Id
private int id;
private String name;
private int age;
private BigDecimal salary;
private String designation;
private Address address;
private long[] phoneNumbers;
/*Getter and Setter Methods*/
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public long[] getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(long[] phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
Address.java
package com.example.demo;
import javax.persistence.Entity;
import javax.persistence.Id;
//@Entity
public class Address {
@Id
private String street;
private String city;
private int zipCode;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public int getZipCode() {
return zipCode;
}
public void setZipcode(int zipcode) {
this.zipCode = zipcode;
}
@Override
public String toString(){
return getStreet() + ", "+getCity()+", "+getZipCode();
}
}
控制器类
package com.example.demo;
import net.sf.json.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import net.sf.json.JSONObject;
@Controller // This means that this class is a Controller
@RequestMapping(path="/demo") // This means URL's start with /demo
(after Application path)
public class MainController {
@Autowired // This means to get the bean called userRepository
// Which is auto-generated by Spring, we will use it
to handle the data
private UserRepository userRepository;
@GetMapping(path="/add") // Map ONLY GET Requests
public @ResponseBody String addNewUser (@RequestBody String json) {
// @ResponseBody means the returned String is the response, not a view name
// @RequestParam means it is a parameter from the GET or POST request
//JSONObject jsonObject = JSONObject.fromObject(json);
Gson gson=new GsonBuilder().create();
Employee employee =gson.fromJson(json,Employee.class);
userRepository.save(employee);
return "Successfully added to database using JPA!";
}
@GetMapping(path="/all")
public @ResponseBody Iterable<Employee> getAllUsers() {
// This returns a JSON or XML with the users
return userRepository.findAll();
}
}
答案 0 :(得分:0)
尝试为您的实体类添加可序列化的实现。 即。
@Entity
public class Employee implements Serializable{
}
答案 1 :(得分:0)
每当在类中使用@Entity注释并尝试将其实例保存在数据库中时。最初,在休眠状态下会创建一个create table命令,该命令会在数据库中使用给定的规范创建表。与在employee表中一样,您可以指定所有数据成员的数据类型。当光标进入“地址”时,它给出了错误,因为休眠无法找到与此相关的任何数据类型或与此相关的任何表。 正如您在Address类中评论@Entity注释。因此,不会在数据库中创建与此有关的表。 地址是此休眠需要的类(表)的类引用。由于class(table)不存在,因此出现错误。