java - How to fetch Hibernate object and map it to JSON -
i have problem. when i'm trying json
object of employee
can't see 1 important field (company
). example, need object this:
{ "name": "jack", "company": { "name": "microsoft", "id": 4 }, "id": 1 }
but instead i'm getting object without company (wrong!):
{ "name": "bill", "id": 2 }
at same time want json object of company:
{ "name": "microsoft", "employees": [ { "name": "jack", "id": 1 }, { "name": "frank", "id": 3 } ], "id": 4 }
company object ok. it's perfect when i'm getting it. problem in employee object.
here entity classes
@entity @table(name = "company") public class company implements serializable { @id @generatedvalue(strategy = generationtype.auto) private integer id; @column private string name; @onetomany(mappedby = "company") @cascade(value = cascadetype.all) @jsonmanagedreference private collection<employee> employees;
and employee class
@entity @table(name = "employee") public class employee implements serializable { @id @generatedvalue(strategy = generationtype.auto) integer id; @column string name; @manytoone() @cascade(value = org.hibernate.annotations.cascadetype.all) @joincolumn(name = "company_id", referencedcolumnname = "id") @jsonbackreference private company company;
i think probjem in @json[somecondition] annotation. can me fix code. need employee object companym this:
{ "name": "jack", "company": { "name": "microsoft", "id": 4 }, "id": 1 }
upd:
here controller:
@controller @requestmapping("/employee") public class employeecontroller { @autowired employeeservice employeeservice; @requestmapping(method = {requestmethod.get}, produces = "application/json") public @responsebody collection<employee> getemployees() { return employeeservice.getemployees(); } @requestmapping(value = "/{id}", method = {requestmethod.get, requestmethod.put}, produces = "application/json") public @responsebody employee getemployee(@pathvariable("id") integer id) { return employeeservice.getemployee(id); } @requestmapping(method = requestmethod.post, consumes = "application/json", headers = "content-type=application/json") public string addemployee(@requestbody employee employee) { employeeservice.addemployee(employee); return "redirect:/employee"; } @requestmapping(method = requestmethod.put, consumes = "application/json", headers = "content-type=application/json") public string updateemployee(@requestbody employee employee) { employeeservice.updateemployee(employee); return "redirect:/employee/" + employee.getid(); } @requestmapping(value = "/{id}", method = requestmethod.delete) public string deleteemployee(@pathvariable("id") integer id) { employeeservice.deleteemployee(id); return "redirect:/employee"; } }
it problem of eager , lazy fetching in hibernate. carefull both concept. read before implements it. add fetch=fetchtype.eager when define relation in company class.
@onetomany(mappedby = "company",fetch=fetchtype.eager) @cascade(value = cascadetype.all) @jsonmanagedreference private collection<employee> employees;
Comments
Post a Comment