array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 JPA综合(一)图书订单 - 爱码网

Book:

package com.bookstore.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="book")
public class Book implements Serializable {

	private Integer book_id;
	private String bookname;
	private String author;
	private double price;
	private String bookimg;
	private String bookdesc;
	
	@Id
	@GeneratedValue
	public Integer getBook_id() {
		return book_id;
	}
	public void setBook_id(Integer book_id) {
		this.book_id = book_id;
	}
	public String getBookname() {
		return bookname;
	}
	public void setBookname(String bookname) {
		this.bookname = bookname;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getBookimg() {
		return bookimg;
	}
	public void setBookimg(String bookimg) {
		this.bookimg = bookimg;
	}
	public String getBookdesc() {
		return bookdesc;
	}
	public void setBookdesc(String bookdesc) {
		this.bookdesc = bookdesc;
	}
	
	
}

 

Customer:

package com.bookstore.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;

@Entity
@Table(name="customer")
public class Customer implements Serializable {
	
	private Integer customer_id;
	private String customer_name;
	private String password;
	private String email;
	private Set<Orders> orders=new HashSet<Orders>();
	
	@Id
	@GeneratedValue
	public Integer getCustomer_id() {
		return customer_id;
	}
	public void setCustomer_id(Integer customer_id) {
		this.customer_id = customer_id;
	}
	
	@Column(name="customer_name",nullable=false,length=32)
	public String getCustomer_name() {
		return customer_name;
	}
	public void setCustomer_name(String customer_name) {
		this.customer_name = customer_name;
	}
	
	@Column(nullable=false,length=32)
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	@Column(nullable=false,length=32)
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	@OneToMany(mappedBy="customer",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
	@OrderBy(value="order_id")
	public Set<Orders> getOrders() {
		return orders;
	}
	public void setOrders(Set<Orders> orders) {
		this.orders = orders;
	}
	
	
	

}

 

Orders:

package com.bookstore.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;

@Entity
@Table(name="orders")
public class Orders implements Serializable {

	private Integer order_id;
	private Customer customer;
	private Set<OrderItem> orderItems=new HashSet<OrderItem>();
	private double totalprice;
	
	@Id
	@GeneratedValue
	public Integer getOrder_id() {
		return order_id;
	}
	public void setOrder_id(Integer order_id) {
		this.order_id = order_id;
	}
	
	@ManyToOne(cascade=CascadeType.PERSIST,optional=false)
	@JoinColumn(name="customer_id")
	public Customer getCustomer() {
		return customer;
	}
	public void setCustomer(Customer customer) {
		this.customer = customer;
	}
	
	@OneToMany(mappedBy="orders",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
	@OrderBy(value="orderItem_id")
	public Set<OrderItem> getOrderItems() {
		return orderItems;
	}
	public void setOrderItems(Set<OrderItem> orderItems) {
		this.orderItems = orderItems;
	}
	
	@Column(nullable=false)
	public double getTotalprice() {
		return totalprice;
	}
	public void setTotalprice(double totalprice) {
		this.totalprice = totalprice;
	}
	
	
}

 

OrderItem

package com.bookstore.entity;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="orderItem")
public class OrderItem implements Serializable {

	private Integer orderItem_id;
	private int quantity;
	private Orders orders;
	private Integer bookid;
	
	@Id
	@GeneratedValue
	public Integer getOrderItem_id() {
		return orderItem_id;
	}
	public void setOrderItem_id(Integer orderItem_id) {
		this.orderItem_id = orderItem_id;
	}
	public int getQuantity() {
		return quantity;
	}
	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}
	
	@ManyToOne(cascade=CascadeType.PERSIST,optional=false)
	@JoinColumn(name="order_id")
	public Orders getOrders() {
		return orders;
	}
	public void setOrders(Orders orders) {
		this.orders = orders;
	}
	
	@Column(nullable=false)
	public Integer getBookid() {
		return bookid;
	}
	public void setBookid(Integer bookid) {
		this.bookid = bookid;
	}
	
	
}

 

数据库表:

mysql> desc book;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| book_id  | int(11)      | NO   | PRI | NULL    | auto_increment |
| bookname | varchar(255) | YES  |     | NULL    |                |
| author   | varchar(255) | YES  |     | NULL    |                |
| price    | double       | NO   |     | NULL    |                |
| bookimg  | varchar(255) | YES  |     | NULL    |                |
| bookdesc | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

mysql> desc customer;
+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| customer_id   | int(11)     | NO   | PRI | NULL    | auto_increment |
| password      | varchar(32) | NO   |     | NULL    |                |
| customer_name | varchar(32) | NO   |     | NULL    |                |
| email         | varchar(32) | NO   |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> desc orders;
+-------------+---------+------+-----+---------+----------------+
| Field       | Type    | Null | Key | Default | Extra          |
+-------------+---------+------+-----+---------+----------------+
| order_id    | int(11) | NO   | PRI | NULL    | auto_increment |
| totalprice  | double  | NO   |     | NULL    |                |
| customer_id | int(11) | NO   | MUL | NULL    |                |
+-------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> desc orderitem;
+--------------+---------+------+-----+---------+----------------+
| Field        | Type    | Null | Key | Default | Extra          |
+--------------+---------+------+-----+---------+----------------+
| orderItem_id | int(11) | NO   | PRI | NULL    | auto_increment |
| quantity     | int(11) | NO   |     | NULL    |                |
| bookid       | int(11) | NO   |     | NULL    |                |
| order_id     | int(11) | NO   | MUL | NULL    |                |
+--------------+---------+------+-----+---------+----------------+
4 rows in set (0.02 sec)
 
保存方法:
public Book saveBook(Book book) {
		em.persist(book);
		System.out.println(book.getBookname());
		return book;
	}

public Customer saveCustomer(Customer customer) {
		em.persist(customer);
		System.out.println(customer.getCustomer_name());
		return customer;
	}

public Orders saveOrder(Orders order) {
		
		em.persist(order);
		System.out.println(order.getOrder_id());
		return order;
	}

public OrderItem saveOrderItem(OrderItem orderItem) {
		em.persist(orderItem);
		System.out.println(orderItem.getOrderItem_id()+"Orderitem");
		return orderItem;
	}

 

单独保存Book和Customer可以。

但在客户端要保存Order,OrderItem该怎么办?

package com.bookstore.test;

import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.bookstore.dao.BookDAO;
import com.bookstore.dao.CustomerDAO;
import com.bookstore.dao.OrderDAO;
import com.bookstore.dao.OrderItemDAO;
import com.bookstore.entity.Book;
import com.bookstore.entity.Customer;
import com.bookstore.entity.OrderItem;
import com.bookstore.entity.Orders;

public class TestBookStore {

	/**
	 * @param args
	 * @throws NamingException 
	 */
	public static void main(String[] args) throws NamingException {
		Properties props=new Properties();
	      props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
	      props.setProperty("java.naming.provider.url","localhost:1099");
	      props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming");
		InitialContext context=new InitialContext(props);
		try{
		/*
			BookDAO bdao=(BookDAO)context.lookup("BookDAOBean/remote");
			Book b1=new Book();
			b1.setAuthor("author1");
			b1.setBookdesc("bookdesc1");
			b1.setBookimg("b1 img");
			b1.setBookname("bname1");
			b1.setPrice(15);
			
			Book b2=new Book();
			b2.setAuthor("author2");
			b2.setBookdesc("bookdesc2");
			b2.setBookimg("b2 img");
			b2.setBookname("bname2");
			b2.setPrice(15);
			
			Book b3=new Book();
			b3.setAuthor("author3");
			b3.setBookdesc("bookdesc3");
			b3.setBookimg("b3 img");
			b3.setBookname("bname3");
			b3.setPrice(15);
			
			bdao.saveBook(b1);
			bdao.saveBook(b2);
			bdao.saveBook(b3);
			
			List<Book> lb=bdao.findBookAll();
			for(Book b:lb){
				System.out.println(b.getAuthor()+" "+b.getBookname()+" "+b.getBookdesc()+" "+b.getPrice());
			}
			
			
			CustomerDAO cdao=(CustomerDAO)context.lookup("CustomerDAOBean/remote");
			Customer c1=new Customer();
			c1.setCustomer_name("persia");
			c1.setEmail("cxccbv@163.com");
			c1.setPassword("password1");
		
*/
			
	     	OrderDAO odao=(OrderDAO)context.lookup("OrderDAOBean/remote");
	     	OrderItemDAO otdao=(OrderItemDAO)context.lookup("OrderItemDAOBean/remote");
	    
		
			Orders order1=new Orders();
			
			OrderItem ot1=new OrderItem();
			ot1.setBookid(new Integer(1));
		//	ot1.setOrders(order1);
			ot1.setQuantity(12);
			
			OrderItem ot2=new OrderItem();
			ot2.setBookid(new Integer(2));
		//	ot2.setOrders(order1);
			ot2.setQuantity(15);
			
					
			Set set=new HashSet();
			set.add(ot1);
			set.add(ot2);
			
			order1.setOrderItems(set);
			order1.setTotalprice(120d);
			
			odao.saveOrder(order1);
	  //     odao.saveOrder(order1);	
		   //  otdao.saveOrderItem(ot1);
		//	otdao.saveOrderItem(ot2);
			
		//	Set orders=new HashSet();
		//	orders.add(order1);
		//	c1.setOrders(orders);
			
						
			
		}catch(Exception e){
			e.printStackTrace();
		}

	}

}

我用上面的代码尝试着保存,不成功。

java.lang.reflect.UndeclaredThrowableException
	at $Proxy0.saveOrder(Unknown Source)
	at com.bookstore.test.TestBookStore.main(TestBookStore.java:98)
Caused by: java.lang.ClassNotFoundException: javax.persistence.PersistenceException
	at org.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:82)
	at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:76)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:174)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239)
	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133)
	at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120)
	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:957)
	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:586)
	at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
	at org.jboss.remoting.Client.invoke(Client.java:1634)
	at org.jboss.remoting.Client.invoke(Client.java:548)
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
	at $Proxy0.saveOrder(Unknown Source)
	at com.bookstore.test.TestBookStore.main(TestBookStore.java:98)
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
	... 2 more

 

一对多和多对多在客户端如何保存?

这跟cascadeType是怎么个关系?

突破了这点,就是一个大的跃进。。。

 

package com.bookstore.test;

import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.bookstore.dao.BookDAO;
import com.bookstore.dao.CustomerDAO;
import com.bookstore.dao.OrderDAO;
import com.bookstore.dao.OrderItemDAO;
import com.bookstore.entity.Book;
import com.bookstore.entity.Customer;
import com.bookstore.entity.OrderItem;
import com.bookstore.entity.Orders;

public class TestBookStore {

	/**
	 * @param args
	 * @throws NamingException 
	 */
	public static void main(String[] args) throws NamingException {
		Properties props=new Properties();
	      props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
	      props.setProperty("java.naming.provider.url","localhost:1099");
	      props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming");
		InitialContext context=new InitialContext(props);
		try{
		
			BookDAO bdao=(BookDAO)context.lookup("BookDAOBean/remote");
			Book b1=new Book();
			b1.setAuthor("author1");
			b1.setBookdesc("bookdesc1");
			b1.setBookimg("b1 img");
			b1.setBookname("bname1");
			b1.setPrice(15);
			
			Book b2=new Book();
			b2.setAuthor("author2");
			b2.setBookdesc("bookdesc2");
			b2.setBookimg("b2 img");
			b2.setBookname("bname2");
			b2.setPrice(15);
			
			Book b3=new Book();
			b3.setAuthor("author3");
			b3.setBookdesc("bookdesc3");
			b3.setBookimg("b3 img");
			b3.setBookname("bname3");
			b3.setPrice(15);
			
			bdao.saveBook(b1);
			bdao.saveBook(b2);
			bdao.saveBook(b3);
			
			List<Book> lb=bdao.findBookAll();
			for(Book b:lb){
				System.out.println(b.getAuthor()+" "+b.getBookname()+" "+b.getBookdesc()+" "+b.getPrice());
			}
		
			
			CustomerDAO cdao=(CustomerDAO)context.lookup("CustomerDAOBean/remote");
			Customer c1=new Customer();
			c1.setCustomer_name("persia");
			c1.setEmail("cxccbv@163.com");
			c1.setPassword("password1");
		    cdao.saveCustomer(c1);
		    
			List<Customer> lc=cdao.findCustomerByName("persia");
			Customer c=lc.get(0);
			System.out.println("获取customer:"+c.getCustomer_name());
	     	OrderDAO odao=(OrderDAO)context.lookup("OrderDAOBean/remote");
	     	
			Orders order1=new Orders();
			
			OrderItem ot1=new OrderItem();
			ot1.setBookid(new Integer(1));
			ot1.setOrders(order1);
			ot1.setQuantity(12);
			
			OrderItem ot2=new OrderItem();
			ot2.setBookid(new Integer(2));
			ot2.setOrders(order1);
			ot2.setQuantity(15);
			
					
			Set set=new HashSet();
			set.add(ot1);
			set.add(ot2);
			
			order1.setOrderItems(set);
			order1.setTotalprice(120d);
		
			order1.setCustomer(c1);
			odao.saveOrder(order1);
	 						
			
		}catch(Exception e){
			e.printStackTrace();
		}

	}

}

 

这样之后:

mysql> select * from orderitem;
+--------------+----------+--------+----------+
| orderItem_id | quantity | bookid | order_id |
+--------------+----------+--------+----------+
|            1 |       15 |      2 |        1 |
|            2 |       12 |      1 |        1 |
+--------------+----------+--------+----------+
2 rows in set (0.00 sec)

mysql> select * from orders;
+----------+------------+-------------+
| order_id | totalprice | customer_id |
+----------+------------+-------------+
|        1 |        120 |           2 |
+----------+------------+-------------+
1 row in set (0.00 sec)

mysql> select * from customer;
+-------------+-----------+----------------+---------------+
| customer_id | password  | email          | customer_name |
+-------------+-----------+----------------+---------------+
|           1 | password1 | cxccbv@163.com | persia        |
|           2 | password1 | cxccbv@163.com | persia        |
+-------------+-----------+----------------+---------------+
2 rows in set (0.00 sec)

mysql> select * from book;
+---------+----------+---------+-------+---------+-----------+
| book_id | bookname | author  | price | bookimg | bookdesc  |
+---------+----------+---------+-------+---------+-----------+
|       1 | bname1   | author1 |    15 | b1 img  | bookdesc1 |
|       2 | bname2   | author2 |    15 | b2 img  | bookdesc2 |
|       3 | bname3   | author3 |    15 | b3 img  | bookdesc3 |
+---------+----------+---------+-------+---------+-----------+
3 rows in set (0.00 sec)

 

customer重复了一个。。。。。

如果中间不保存customer,则customer是一个。

但是customer是先注册后再购物的,即使是注册时购物,再第二次购物时也会重复。

我估计问题在orders跟customer的cascade类型上。

但如果去掉order对customer的cascade:

author1 bname1 bookdesc1 15.0
author2 bname2 bookdesc2 15.0
author3 bname3 bookdesc3 15.0
java.lang.reflect.UndeclaredThrowableException
	at $Proxy2.saveOrder(Unknown Source)
	at com.bookstore.test.TestBookStore.main(TestBookStore.java:99)
Caused by: java.lang.ClassNotFoundException: javax.persistence.PersistenceException
	at org.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:82)
	at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:76)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:174)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239)
	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133)
	at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120)
	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:957)
	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:586)
	at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
	at org.jboss.remoting.Client.invoke(Client.java:1634)
	at org.jboss.remoting.Client.invoke(Client.java:548)
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
	at $Proxy2.saveOrder(Unknown Source)
	at com.bookstore.test.TestBookStore.main(TestBookStore.java:99)
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
	... 2 more
 
如何解决???

 

 

 
 

相关文章: