Kos*_*asC 7 spring json hibernate jackson
我有一对多的关系,这是我的代码
@Entity
@Table(name = "catalog")
public class Catalog {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "catalog_id")
private int catalog_id;
@NotEmpty
@Size(min = 3, max = 255)
@Column(name = "name", nullable = false)
private String name;
@OneToMany(mappedBy="mycatalogorder")
private List<Order> orders;
@OneToMany(mappedBy="mycatalog")
private List<CatalogItem> items;
// setters and getters
}
@Entity
@Table(name = "catalogitem")
public class CatalogItem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "catalogitem_id")
private int catalogitem_id;
@NotEmpty
@Size(min = 3, max = 255)
@Column(name = "name", nullable = false)
private String name;
@NotEmpty
@Column(name = "price", nullable = false)
private Double price;
@OneToOne(mappedBy="ordercatalogitem", cascade=CascadeType.ALL)
private OrderItem morderitem;
@ManyToOne
@JoinColumn(name="catalog_id", nullable=false)
private Catalog mycatalog;
// setters and getters
}
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "order_id")
private int order_id;
@NotEmpty
@Size(min = 3, max = 255)
@Column(name = "name", nullable = false)
private String name;
@NotEmpty
@Size(min = 3, max = 1024)
@Column(name = "note", nullable = false)
private String note;
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern = "ddmmYYYY HH:mm:ss")
@Column(name = "created", nullable = false)
private Date created;
@OneToMany(mappedBy="myorder")
private Set<OrderItem> orderItems;
@ManyToOne
@JoinColumn(name="catalog_id", nullable=false)
private Catalog mycatalogorder;
@PrePersist
protected void onCreate() {
created = new Date();
}
// setters and getters
}
@Entity
@Table(name = "orderitem")
public class OrderItem {
@Id
@Column(name="catalogitem_id", unique=true, nullable=false)
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="catalogitem"))
private int catalogitem_id;
@Column(name = "quantity")
private int quantity;
@OneToOne
@PrimaryKeyJoinColumn
private CatalogItem ordercatalogitem;
@ManyToOne
@JoinColumn(name="order_id", nullable=false)
private Order myorder;
// setters and getters
}
Run Code Online (Sandbox Code Playgroud)
我得到了例外:
org.springframework.http.converter.HttpMessageNotWritableException:无法写入内容:懒得初始化角色集合:com.example.helios.model.Catalog.items,无法初始化代理 - 无会话; 嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:懒得初始化一个角色集合:com.example.helios.model.Catalog.items,无法初始化代理 - 没有Session org.springframework.http.converter.json .AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:271)org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:100)org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java :222)org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:183)org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:80)org.springframework .web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod .invokeAndHandle(ServletInvocableHandlerMethod.java:126)
我的版本是:
Ang*_*ata 20
这是正常的Hibernate行为
在一对多关系中,hibernate加载父实体(在你的情况下为Catalog),但是它将在LAZY模式下加载子实体List(在你的情况下列出项目和列表顺序)
这意味着您无法访问这些对象,因为它们只是代理而不是真实对象
这对于避免在执行查询时加载完整数据库很有用
你有2个解决方案:
安杰洛
| 归档时间: |
|
| 查看次数: |
18364 次 |
| 最近记录: |