Spring MVC+;Hibernate无法获取项属性
一、 我卡住了。我的数据输出有问题。我试着做一些订购产品的项目。我的实体如下:Spring MVC+;Hibernate无法获取项属性,spring,hibernate,Spring,Hibernate,一、 我卡住了。我的数据输出有问题。我试着做一些订购产品的项目。我的实体如下: @Entity @Table(name = "sales") public class Sale implements Serializable { public Sale() { } @Id @Column @GeneratedValue(strategy = GenerationType.AUTO) private int id; @Column(
@Entity
@Table(name = "sales")
public class Sale implements Serializable {
public Sale() {
}
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(insertable = false, updatable = false)
private Timestamp date;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "sale")
private List<OrderItem> items = new ArrayList<OrderItem>();
@Column
private double cost;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Timestamp getDate() {
return date;
}
public void setDate(Timestamp date) {
this.date = date;
}
public List<OrderItem> getItems() {
return items;
}
public void setItems(List<OrderItem> items) {
this.items = items;
}
public double getCost() {
return cost;
}
public void setCost(double cost) {
for(OrderItem item : items)
cost += item.getProduct().getPrice() * item.getQuantity();
this.cost = cost;
}
}
@Entity
@Table(name = "products")
public class Product implements Serializable {
public Product() {
}
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column
private String name;
@Column
private double price;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "product")
private Set<OrderItem> items = new HashSet<OrderItem>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Set<OrderItem> getItems() {
return items;
}
public void setItems(Set<OrderItem> items) {
this.items = items;
}
public boolean isNew() {
return this.id == 0;
}
}
@Entity
@Table(name = "order_items")
public class OrderItem implements Serializable {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column
private int quantity;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "product_id")
private Product product;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "sale_id")
private Sale sale;
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
@实体
@表(name=“销售”)
公共类Sale实现了可序列化{
公开发售(){
}
@身份证
@纵队
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
@列(可插入=false,可更新=false)
私有时间戳日期;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“sale”)
私有列表项=新的ArrayList();
@纵队
私人双重成本;
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共时间戳getDate(){
返回日期;
}
公共作废设置日期(时间戳日期){
this.date=日期;
}
公共列表getItems(){
退货项目;
}
公共无效集合项(列表项){
这个项目=项目;
}
公共成本{
退货成本;
}
公共成本(双倍成本){
对于(订单项:项)
成本+=item.getProduct().getPrice()*item.getQuantity();
成本=成本;
}
}
@实体
@表(name=“产品”)
公共类产品实现可序列化{
公共产品(){
}
@身份证
@纵队
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
@纵队
私有字符串名称;
@纵队
私人双价;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“product”)
private Set items=new HashSet();
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公开双价{
退货价格;
}
公共定价(双倍价格){
这个价格=价格;
}
公共集合getItems(){
退货项目;
}
公共无效集合项(集合项){
这个项目=项目;
}
public boolean isNew(){
返回this.id==0;
}
}
@实体
@表(name=“订单项目”)
公共类OrderItem实现可序列化{
@身份证
@生成值
@列(name=“id”)
私人长id;
@纵队
私人整数数量;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“产品标识”)
私人产品;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“sale\u id”)
私人买卖;
公共整数getQuantity(){
退货数量;
}
公共无效设置数量(整数数量){
这个。数量=数量;
}
公共产品{
退货产品;
}
公共产品(产品){
本产品=产品;
}
}
SQL表的创建方式如下:
创建表格产品(
id序列主键不为空,
名称字符(50)不为空,
不动产价格不为空
)
带(OID=假)
创建表销售(
id序列主键不为空,
实际成本不为空,
日期时间戳非空默认当前时间戳
)
带(OID=假)
创建表格订单项目(
序列号不为空,
销售标识整数不为空,
乘积_id整数,
数量整数不为空,
主键(销售标识,id)
)
带(OID=假)
更改表格顺序\u项
添加约束订单\项SFK0外键(产品\标识)引用产品(标识);
更改表格顺序\u项
添加约束订单\项SFK1外键(销售\标识)引用销售(标识)
我的销售表格:
产品
量
成本
我在形式上有问题,我试图增加销售。项目不正确,无法保存。我把jsp代码写错了,但我不知道如何把它弄对。需要帮助,请 你有日志吗?确保您的帖子到达服务器端。已解决。我在项目中重新制作了一些东西,jsp部分。添加添加页面,一切正常。ava.lang.IllegalArgumentException:“items”不能为null org.springframework.util.Assert.notNull(Assert.java:115)org.springframework.web.servlet.tags.form.AbstractMulticheckeDeleteTag.setItems(AbstractMulticheckeDeleteTag.java:84)org.apache.jsp.WEB_002dINF.jsp.sales.saleform_jsp.\u jspx_meth_表单_005fradiobuttons_005f0(saleform_jsp.java:571)org.apache.jsp.WEB_002dINF.jsp.sales.saleform_jsp.\u jsp服务(saleform_jsp.java:265)org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)我需要对OrderItem的访问权限,当我尝试添加它时,
t无法访问此字段。
<form:hidden path="id" />
<spring:bind path="items">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Product</label>
<div class="col-sm-5">
<form:select path="items" class="form-control">
<form:options items="${productMap}" />
</form:select>
<form:errors path="items" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="items">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Quantity</label>
<div class="col-sm-10">
<form:radiobuttons path="items" items="${numberList}" element="label class='radio-inline'" />
<br />
<form:errors path="items" class="control-label" />
</div>
</div>
</spring:bind>
<spring:bind path="cost">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Cost</label>
<div class="col-sm-10">
<form:input path="cost" type="text" class="form-control" id="cost"
placeholder="Cost" />
<form:errors path="cost" class="control-label" />
</div>
</div>
</spring:bind>