करने के लिए डेटा एक मैं OneToMany और ManyToOne कॉन्फ़िगर में स्प्रिंग डेटा प्रोजेक्ट मानचित्रण लेकिन कुछ मुद्दे हैं की कोशिश करो।स्प्रिंग कई मानचित्रण
तो मेरे पास दो इकाइयां हैं: नियोक्ता और परियोजना। एक नियोक्ता के पास कई परियोजनाएं हो सकती हैं।
इकाई वर्गों:
Employer.java
@Entity
@Table (name="Employer")
public class Employer {
@Id
@SequenceGenerator(name="my_seq", sequenceName="GLOBAL_SEQUENCE")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="my_seq")
@Column (name="employer_id")
private int id;
@Column (name="name")
private String name;
@JoinColumn (name="employer_id")
@OneToMany(mappedBy = "employer", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Project> project = new HashSet<Project>();
......................
}
Project.java
@Entity
@Table (name="Project")
public class Project {
@Id
@SequenceGenerator(name="my_seq", sequenceName="GLOBAL_SEQUENCE")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="my_seq")
@Column (name="project_id")
private int id;
@Column (name="name")
private String name;
@ManyToOne
@JoinColumn(name="employer_id", nullable = false)
private Employer employer;
......................
}
भंडार कक्षाएं:
public interface EmployerRepository extends JpaRepository<Employer, Integer> {
}
public interface ProjectRepository extends JpaRepository<Project, Integer> {
}
सेवाएं:
@Service
public class EmployerServiceImpl implements EmployerService {
@Autowired
private EmployerRepository employerRepository;
@Override
public List<Employer> getAllEmployers() {
return employerRepository.findAll();
}
}
@Service
public class ProjectServiceImpl implements ProjectService {
@Autowired
private ProjectRepository projectRepository;
@Override
public List<Project> getAllProjects() {
return projectRepository.findAll();
}
}
नियंत्रक:
@Controller
public class MainController {
private EmployerService employerService;
private ProjectService projectService;
@Autowired(required = true)
@Qualifier(value = "employerService")
public void setEmployerService(EmployerService employerService) {
this.employerService = employerService;
}
@Autowired(required = true)
@Qualifier(value = "projectService")
public void setProjectService(ProjectService projectService) {
this.projectService = projectService;
}
@RequestMapping(value="/employers", method=RequestMethod.GET)
public @ResponseBody List<Employer> getEmployers(@RequestParam(value = "name", required = false) String name) {
return employerService.getAllEmployers();
}
..............................
}
नियोक्ता तालिका:
EMPLOYER_ID . NAME
......................
1 . Google
2 . Oracle
3 . Facebook
परियोजना तालिका: कुछ इस तरह
PROJECT_ID . NAME . EMPLOYER_ID
.......................................
1 . Create web site . 1
2 . Create reporting . 2
3 . Create web service . 3
4 . Fixing web site . 1
मैं उम्मीद कर रहा हूँ: controller
वर्ग से
[{"id":1,"name":"Google","project":[{"id":1,"name":"Create web site"}, {"id":4,"name":"Fixing web site"}},
{"id":2,"name":"Oracle","project":{"id":2,"name":"Create reporting"}},
{"id":3,"name":"Facebook","project":{"id":3,"name":"Create web service"}}]
लेकिन getEmployers
विधि लौट इस एक:
[{"id":1,"name":"Oracle","project":[{"id":4,"name":"Fixing web site",
"employer":{"id":1,"name":"Oracle","project":[{"id":4,"name":"Fixing web site",
"employer":{"id":1,"name":"Oracle","project":[{"id":4,"name":"Fixing web site",
"employer":{"id":1,"name":"Oracle","project":[{"id":4,"name":"Fixing web site",
"employer":{"id":1,"name":"Oracle","project":[{"id":4,"name":"Fixing web site",
"employer":{"id":1,"name":"Oracle","project":[{"id":4,"name":"Fixing web site","employer":
...................
कृपया खेद इस सवाल कई बार चर्चा की, लेकिन मैं नहीं था, तो कोई उपयुक्त उत्तर नहीं मिला।
अग्रिम धन्यवाद!
रीप्ले के लिए धन्यवाद। मैं '@ManyToOne (fetch = FetchType.LAZY) 'को' प्रोजेक्ट 'इकाई में जोड़ता हूं लेकिन इससे मदद नहीं मिलती है, परिणाम पहले जैसा ही होता है। – Iurii
ऐसा लगता है कि जैक्सन आलसी-भारित इकाइयों को क्रमबद्ध करने के लिए समाप्त होता है। [यह पोस्ट] (http://stackoverflow.com/questions/25906985/jackson-do-not-serialize-lazy-objects) में कुछ विकल्प हैं जिन्हें आप आजमा सकते हैं। – manish
मैं इस एक के लिए मेरी OneToMany मानचित्रण बदल दिया है: '@JsonInclude (JsonInclude.Include.NON_EMPTY) @OneToMany (लाने = FetchType.EAGER, mappedBy = (" नियोक्ता "), झरना = CascadeType.ALL) निजी सेट परियोजना = नया हैशसेट (); 'लेकिन यह –
Iurii