多地多关联的增加,修改和删除
2009-01-24 23:43
106 查看
packagecom.score.test; importjava.util.HashSet; importjava.util.Properties; importjavax.naming.InitialContext; importjavax.naming.NamingException; importcom.score.dao.CourseDAO; importcom.score.dao.ScoreDAO; importcom.score.dao.StudentDAO; importcom.score.entity.Course; importcom.score.entity.Score; importcom.score.entity.Student; publicclassTestScore{ /** *@paramargs *@throwsNamingException */ publicstaticvoidmain(String[]args)throwsNamingException{ Propertiesprops=newProperties(); 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"); InitialContextcxt=newInitialContext(props); try{ ScoreDAOsdao=(ScoreDAO)cxt.lookup("ScoreDAOBean/remote"); StudentDAOstudao=(StudentDAO)cxt.lookup("StudentDAOBean/remote"); CourseDAOcoudao=(CourseDAO)cxt.lookup("CourseDAOBean/remote"); Scores1=newScore(); Scores2=newScore(); Studentstu1=studao.findStudentById(newInteger(1)); Coursec1=coudao.findCourseById(newInteger(1)); Coursec2=coudao.findCourseById(newInteger(2)); HashSet<Course>hs=newHashSet<Course>(); hs.add(c1); hs.add(c2); stu1.setCourses(hs); studao.updateStudent(stu1); s1.setCourse(c1); s1.setStudent(stu1); s1.setScore(99d); s2.setCourse(c2); s2.setStudent(stu1); s2.setScore(98d); sdao.addScore(s1); sdao.addScore(s2); }catch(Exceptione){ e.printStackTrace(); } } }
由于没有设置级联增加,所有这里手工增加。
修改关联表:
try{
ScoreDAOscoredao=(ScoreDAO)cxt.lookup("ScoreDAOBean/remote");List<Score>ls=scoredao.findScoreByStudentId(newInteger(1));for(Scores:ls){s.setScore(100);scoredao.updateScore(s);}}catch(Exceptione){e.printStackTrace();}
删除学生:
try{ScoreDAOscoredao=(ScoreDAO)cxt.lookup("ScoreDAOBean/remote");StudentDAOstudao=(StudentDAO)cxt.lookup("StudentDAOBean/remote");List<Score>ls=scoredao.findScoreByStudentId(newInteger(1));for(Scores:ls){//s.setScore(100);//scoredao.updateScore(s);Studentstu=s.getStudent();studao.deleteStudent(stu.getId());s.setStudent(null);scoredao.updateScore(s);}
报错:
java.lang.reflect.UndeclaredThrowableExceptionat$Proxy1.deleteStudent(UnknownSource)atcom.score.test.TestDelete.main(TestDelete.java:33)Causedby:java.lang.ClassNotFoundException:javax.persistence.EntityExistsExceptionatorg.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:82)atorg.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:76)atjava.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)atjava.lang.Class.forName0(NativeMethod)atjava.lang.Class.forName(Class.java:247)atorg.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:174)atjava.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)atjava.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)atjava.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)atjava.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)atjava.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)atjava.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)atjava.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)atjava.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)atjava.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)atjava.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)atjava.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)atjava.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)atjava.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)atjava.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)atjava.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)atjava.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)atjava.io.ObjectInputStream.readObject(ObjectInputStream.java:351)atorg.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239)atorg.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133)atorg.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120)atorg.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:957)atorg.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:586)atorg.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)atorg.jboss.remoting.Client.invoke(Client.java:1634)atorg.jboss.remoting.Client.invoke(Client.java:548)atorg.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)atorg.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)atorg.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)atorg.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)atorg.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)atorg.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)atorg.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)atorg.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)atorg.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)at$Proxy1.deleteStudent(UnknownSource)atcom.score.test.TestDelete.main(TestDelete.java:33)atorg.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)atorg.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)atorg.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)atorg.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)atorg.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)atorg.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)atorg.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)atorg.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)atorg.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)...2more删除的顺序不对,看JBOSS报错:
Causedby:java.sql.BatchUpdateException:Cannotdeleteorupdateaparentrow:aforeignkeyconstraintfails(`ejb3/tb_score`,CONSTRAINT`FKFACAA58158DBE5D8`FOREIGNKEY(`student_id`)REFERENCES`tb_student`(`id`))atcom.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1213)atcom.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:912)atorg.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:519)atorg.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)atorg.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)...36more先删除关联表的记录后才能删除:
try{ScoreDAOscoredao=(ScoreDAO)cxt.lookup("ScoreDAOBean/remote");StudentDAOstudao=(StudentDAO)cxt.lookup("StudentDAOBean/remote");List<Score>ls=scoredao.findScoreByStudentId(newInteger(1));for(Scores:ls){//s.setScore(100);//scoredao.updateScore(s);scoredao.deleteScore(s.getId());}这里还不能删除student,因为他还跟course表有关联。-------------------------------------------------------------------------------------------------------------------------若是级联删除,可以直接删除student的,若级联删除的是score,score这个关联表被删除了。
@OneToMany(mappedBy="student",cascade=CascadeType.REMOVE)publicSet<Score>getScores(){returnscores;}publicvoidsetScores(Set<Score>scores){this.scores=scores;}SQL输出:
delete fromtb_score whereid=?23:35:22,343INFO[STDOUT]Hibernate: delete fromtb_score whereid=?23:35:22,343INFO[STDOUT]Hibernate: delete fromtb_student whereid=?
但是怎么连student和course的关联表也删除了呢?----级联的意思:不仅删除自己,
也删除与自己关联的对象(关联表)---暂且这么理解,有待严格的验证。
这里由于student对course没有设置级联删除,否则连同course表的级联也没有了。。。
相关文章推荐
- 中继器的使用 —— 关联/增加/删除/修改数据
- HTML数组显示+删除+修改+增加
- SQL语句修改表字段名/修改字段长度/增加字段/删除字段
- ASP.NET中数据库的操作初步----增加、删除、修改
- Oracle 增加修改删除字段
- 增加、编辑、删除和密码修改测试用例
- jQuery 增加 删除 修改select option
- 如何在Oracle中增加修改删除字段
- Active Directory如何用C#进行增加、删除、修改、查询用户与组织单位!
- 获取、增加、修改、删除sqlserver字段描述
- C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例
- UITableView的cell表格刷新(增加,删除,修改)
- Oracle 增加修改删除字段
- swift:CoreData简单入门(增加、查询、修改、删除)(详细讲解)
- SQL语句增加列、修改列、删除列
- 连接数据库 增加 删除 查询 修改 (swing中)
- Oracle 增加修改删除字段
- C#使用linq to xml完成对XML文件的创建、增加、删除、修改、查询
- linux 配置 vsftpd 匿名用户可增加、修改、删除文件
- jquery easyui datagrid的增加,修改,删除