我用Spring Boot+Hibernate+PostgreSQL制作了网上鞋店,里面有关于鞋子信息的表格Goods和包含具体鞋子尺码和库存数量信息的尺寸表.因此,摆放商品的桌子将包含有关其尺寸的信息.表大小包含商品中ID的外键,我希望Hibernate解析将包含大小的JSON
来自良好实体的关系
@Entity
@Table(name = "goods")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Good {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int Id;
@Column(name = "Title")
private String title;
@Enumerated(EnumType.STRING)
@Column(name = "sex")
private sexType sexType;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.DETACH,
CascadeType.REFRESH, CascadeType.MERGE})
@JoinColumn(name = "ManufacturerId")
@JsonManagedReference //-------------------------------------------------------
Manufacturer manufacturer; //Many goods can refer to one manufacturer
@JsonBackReference
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.DETACH,
CascadeType.REFRESH, CascadeType.MERGE}, mappedBy = "good") //Uni-directional reference to size array
//@JoinColumn(name= "goodid")
List<Size> sizes; //Refactor to bi-directional relationship
public void addSizeToGood(Size size) {
if (sizes == null) sizes = new ArrayList<>();
sizes.add(size);
//size.setGood(this);
}
大小实体
@Entity
@Table(name = "sizes")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Size {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int Id;
@Column(name = "Size")
private int size;
@Column(name = "Quantity")
private int quantity;
@Column(name = "goodid")
private int goodId;
@JsonManagedReference
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "goodId")
Good good;
返回商品 list 的DAO方法
@Repository
public class GoodDAOImpl implements GoodDAO{
@Autowired
private EntityManager entityManager;
@Override
@Transactional //Spring open and close transactions automatically
public List<Good> getAllGoods() {
Session session = entityManager.unwrap(Session.class);
//Query<Good> query = session.createQuery("from Good", Good.class);
Query<Good> query = (Query<Good>) entityManager.createQuery("from Good right join Size on Good.");
List<Good> allGoods = query.getResultList();
return allGoods;
}
}
DB architecture. JSON response w/o info about sizes.
我试图使用复杂的查询hql代码,并使用了多个Hibernate注释,但什么都没有发生……