0
我有3个实体。 ClassA,ClassB和Class C. ClassA与ClassB和Class C有ManyToOne。Spring MVC:findById - 不包含所有ManyToOne集合
如果我从网络浏览器转到/classA/1
或/classA/abc/1
,我得到了ClassA和ClassB和ClassC中所有项目的非常大的JSON。
但我只想ClassA和ClassB的id和ClassC的id。
我在哪里出错?
有被简化代码:
/* ------------------------------------------------------ */
@Entity
@Table(name="CLASS_A")
@NamedQuery(name="ClassA.findAll", query="SELECT c FROM ClassA c")
public class ClassA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique=true, nullable=false)
private int id;
@ManyToOne
@JoinColumn(name="class_b_id", nullable=false)
private ClassB classB;
@ManyToOne
@JoinColumn(name="class_c_id", nullable=false)
private ClassC classC;
@Lob
private String description;
public ClassA() {
}
// getters and setters...
}
/* ------------------------------------------------------ */
@Entity
@Table(name = "CLASS_B")
@NamedQuery(name = "ClassB.findAll", query = "SELECT c FROM ClassB c")
public class ClassB implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(unique = true, nullable = false)
private int id;
@Lob
private String description;
@OneToMany(mappedBy = "classB")
private List<ClassA> classesA;
public ClassB() {
}
// getters and setters...
}
/* ------------------------------------------------------ */
Entity
@Table(name = "CLASS_C")
public class ClassC implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(unique = true, nullable = false)
private int id;
@Lob
private String description;
@OneToMany(mappedBy = "classC")
private List<ClassA> classesA;
public ClassC() {
}
// getters and setters...
}
/* ------------------------------------------------------ */
@Repository
public class DaoClassA {
@Autowired
private SessionFactory sessionFactory;
public ClassA findById(int id) {
return (ClassA) this.sessionFactory.getCurrentSession().
get(ClassA.class, id);
}
public ClassA findByIdMy(int id) {
return (ClassA) this.sessionFactory.getCurrentSession()
.createQuery("SELECT n FROM ClassA n LEFT JOIN FETCH n.classB LEFT JOIN FETCH n.classC WHERE n.id = :id").setInteger("id", id)
.uniqueResult();
}
}
/* ------------------------------------------------------ */
@Controller
@RequestMapping("/classA")
public class RestController {
@Autowired
private ClassAmanager manager;
@RequestMapping(value="/{id}", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ClassA get1(@PathVariable("id") int id) {
return manager.findById(id);
}
@RequestMapping(value="/abc/{id}", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ClassA get2(@PathVariable("id") int id) {
return manager.findByIdMy(id);
}
}
/* ------------------------------------------------------ */
是的,例子会很好。 – martin 2014-10-10 16:01:24