- python中eof表示什么语句错误
- python中for语句涉及的序列
- python中if是循环语句吗
- python中if语句与或非
在前面的学习中,我们所涉及的都是基于单表的操作,但在实际的开发过程中,基本上都是同时对多张表的操作,且这些表都存在一定的关联关系。
Hibernate 是一款基于 ORM 设计思想的框架,它将关系型数据库中的表与我们 Java 实体类进行映射,表中的记录对应实体类的对象,而表中的字段对应着实体类中的属性。Hibernate 进行增删改查等操作时,不再直接操作数据库表,而是对与之对应的实体类对象进行处理。那么,Hibernate 是如何处理多表关联问题的呢?本节我们针对此问题进行介绍。
package net.biancheng.www.po; public class Student { private Integer id; private String name; //持有实体类 Grade 的一个引用,维护多对一关系 private Grade grade; public Student() { } public Student(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", grade=" + grade + '}'; } }
package net.biancheng.www.po; import java.util.HashSet; import java.util.Set; public class Grade { private Integer Id; private String name; //持有 Student 引用的集合,来维护一对多关联关系 private Set<Student> students = new HashSet<>(); public Integer getId() { return Id; } public void setId(Integer id) { Id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } @Override public String toString() { return "Grade{" + "Id=" + Id + ", name='" + name + '}'; } }
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Student" table="student" schema="bianchengbang_jdbc" lazy="true"> <!--主键映射--> <id name="id" column="id" type="java.lang.Integer"> <!--主键生成策略--> <generator class="native"></generator> </id> <property name="name" column="name" length="100" type="java.lang.String"></property> <!--维护关联关系--> <many-to-one name="grade" class="net.biancheng.www.po.Grade" column="gid"/> </class> </hibernate-mapping>
属性名 | 描述 |
---|---|
name | 用来设置关联对象的属性名称 |
column | 用来设置实体类所对应的数据库表的外键的字段名称 |
class | 用来设置关联对象类的完全限定名(包名+类名) |
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Grade" table="grade" schema="bianchengbang_jdbc"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"></generator> </id> <property name="name" column="name" length="100" type="java.lang.String"/> <!--使用 set 元素维护一对多关联关系--> <set name="students"> <key column="gid"></key> <one-to-many class="net.biancheng.www.po.Student"></one-to-many> </set> </class> </hibernate-mapping>
名称 | 类型 | 描述 |
---|---|---|
name | 属性 | 关联对象引用(集合类型)的属性名称; |
<key> | 子标签 | 用于设置关联对象所对应的数据库表的外键,其 colum 属性用于指定外键的字段名称。 |
<one-to-many> | 子标签 | 用于维护一对多关系,其 class 属性用来设置关联对象类的完全限定名(包名+类名)。 |
<mapping resource="net/biancheng/www/mapping/Grade.hbm.xml "/> <mapping resource="net/biancheng/www/mapping/Student.hbm.xml" />
/** * 一对多 */ @Test public void addCascade() { Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //创建一个班级对象 Grade grade = new Grade(); grade.setName("一年级"); //创建学生对象 Student student = new Student(); student.setName("小明"); //设置学生的班级 student.setGrade(grade); //创建学生对象 Student student2 = new Student(); student2.setName("小红"); //设置学生的班级 student2.setGrade(grade); //设置班级内有哪些学生 grade.getStudents().add(student); grade.getStudents().add(student2); //保存学生信息 session.save(student); session.save(student2); //保存班级信息 session.save(grade); //提交事务 transaction.commit(); //释放资源 session.close(); }
Hibernate: create table grade ( id integer not null auto_increment, name varchar(100), primary key (id) ) engine=MyISAM Hibernate: create table student ( id integer not null auto_increment, name varchar(100), gid integer, primary key (id) ) engine=MyISAM Hibernate: alter table student add constraint FKrahcsicxucn7bhee8empkb42c foreign key (gid) references grade (id) Hibernate: insert into grade (name) values (?) Hibernate: insert into student (name, gid) values (?, ?) Hibernate: insert into student (name, gid) values (?, ?) Hibernate: update student set gid=? where id=? Hibernate: update student set gid=? where id=?
id | name | gid |
---|---|---|
1 | 小明 | 1 |
2 | 小红 | 1 |
id | name |
---|---|
1 | 一年级 |
package net.biancheng.www.po; import java.util.HashSet; import java.util.Set; /** * 课程实体类 */ public class Course { private Integer id; private String name; //学生 Student 的集合作为其属性,维护多对多关联关系 private Set<Student> students = new HashSet<>(); public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } @Override public String toString() { return "Course{" + "id=" + id + ", name='" + name + '}'; } }
package net.biancheng.www.po; import java.util.HashSet; import java.util.Set; /** * 学生实体类 */ public class Student { private Integer id; private String name; private Grade grade; //将 Course 对象的集合作为其属性,以维护它们之间的多对多关联关系 private Set<Course> courses = new HashSet<>(); public Student() { } public Set<Course> getCourses() { return courses; } public void setCourses(Set<Course> courses) { this.courses = courses; } public Student(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", grade=" + grade + '}'; } }
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Course" table="course" schema="bianchengbang_jdbc"> <id name="id" column="id" > <generator class="native"></generator> </id> <property name="name" column="name" length="100"/> <set name="students" table="student_course" cascade="save-update"> <key column="cid"></key> <many-to-many class="net.biancheng.www.po.Student" column="sid"></many-to-many> </set> </class> </hibernate-mapping>
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Student" table="student" schema="bianchengbang_jdbc" lazy="true"> <!--主键映射--> <id name="id" column="id" type="java.lang.Integer"> <!--主键生成策略--> <generator class="native"></generator> </id> <property name="name" column="name" length="100" type="java.lang.String"></property> <!--维护关联关系--> <many-to-one name="grade" class="net.biancheng.www.po.Grade" column="gid"/> <set name="courses" table="student_course" lazy="false"> <key column="sid"></key> <many-to-many class="net.biancheng.www.po.Course" column="cid"></many-to-many> </set> </class> </hibernate-mapping>
名称 | 类型 | 说明 |
---|---|---|
name | 属性 | 关联对象的名称 |
table | 属性 | 中间表的表明 |
lazy | 属性 | 是否启用懒加载 |
<key> | 子标签 | <set> 标签的子标签,用于映射中间表的外键字段;其 colum 属性,用于指定中间表的哪个外键指向当前数据库表的主键。 |
<many-to-many> | 子标签 | <set> 标签的子标签,用于关联实体类,该子标签包含以下属性:
|
<!--指定课程的映射文件--> <mapping resource="net/biancheng/www/mapping/Course.hbm.xml" />
/** * 多对多 * 保存操作 */ @Test public void testManyToManySave() { Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //新建学生和班级信息 Grade grade = new Grade(); grade.setName("三年级"); Student student = new Student(); student.setName("选课学生1"); student.setGrade(grade); Student student2 = new Student(); student2.setName("选课学生2"); student2.setGrade(grade); grade.getStudents().add(student); grade.getStudents().add(student2); //新建三个课程 Course course = new Course(); course.setName("Java"); Course course2 = new Course(); course2.setName("PHP"); Course course3 = new Course(); course3.setName("C++"); //学生选课 course.getStudents().add(student); course.getStudents().add(student2); course3.getStudents().add(student); course3.getStudents().add(student2); //保存操作 session.save(student); session.save(student2); session.save(grade); session.save(course); session.save(course2); session.save(course3); //提交事务 transaction.commit(); //释放资源 session.close(); }
Hibernate: alter table student add constraint FKrahcsicxucn7bhee8empkb42c foreign key (gid) references grade (id) Hibernate: alter table student_course add constraint FKkx4bkddvbfs0ese9v7hc5rycg foreign key (cid) references course (id) Hibernate: alter table student_course add constraint FK8era63dfxi3csvjpresf6fdgu foreign key (sid) references student (id) Hibernate: insert into student (name, gid) values (?, ?) Hibernate: insert into student (name, gid) values (?, ?) Hibernate: insert into grade (name) values (?) Hibernate: insert into course (name) values (?) Hibernate: insert into course (name) values (?) Hibernate: insert into course (name) values (?) Hibernate: update student set name=?, gid=? where id=? Hibernate: update student set name=?, gid=? where id=? Hibernate: update student set gid=? where id=? Hibernate: update student set gid=? where id=? Hibernate: insert into student_course (cid, sid) values (?, ?) Hibernate: insert into student_course (cid, sid) values (?, ?) Hibernate: insert into student_course (cid, sid) values (?, ?) Hibernate: insert into student_course (cid, sid) values (?, ?)
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Grade" table="grade" schema="bianchengbang_jdbc"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"></generator> </id> <property name="name" column="name" length="100" type="java.lang.String"/> <!--设置 inverse 属性为 true,使其丧失对关联关系的控制权,由 Student 来管理关联关系--> <set name="students" inverse="true"> <key column="gid"></key> <one-to-many class="net.biancheng.www.po.Student"></one-to-many> </set> </class> </hibernate-mapping>
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Course" table="course" schema="bianchengbang_jdbc"> <id name="id" column="id"> <generator class="native"></generator> </id> <property name="name" column="name" length="100"/> <!--设置 inverse 属性为 true,使其丧失对关联关系的控制权,由 Student 来管理关联关系--> <set name="students" table="student_course" inverse="true"> <key column="cid"></key> <many-to-many class="net.biancheng.www.po.Student" column="sid"></many-to-many> </set> </class> </hibernate-mapping>
/** * 多对多 * 保存操作 */ @Test public void testManyToManySave() { Session session = HibernateUtils.openSession(); Transaction transaction = session.getTransaction(); transaction.begin(); //新建一个班级信 Grade grade = new Grade(); grade.setName("三年级(反转)"); //新建两个学生 Student student = new Student(); student.setName("选课学生1(反转)"); Student student2 = new Student(); student2.setName("选课学生2(反转)"); //新建三个课程 Course course = new Course(); course.setName("Java(反转)"); Course course2 = new Course(); course2.setName("PHP(反转)"); Course course3 = new Course(); course3.setName("C++(反转)"); //由于所有的关联关系控制权都交给了Student,因此只能由Stduent对关联关系进行维护 student.setGrade(grade); student.getCourses().add(course); student.getCourses().add(course2); student.getCourses().add(course3); student2.setGrade(grade); student2.getCourses().add(course); student2.getCourses().add(course3); //保存数据 session.save(course); session.save(course2); session.save(course3); session.save(grade); session.save(student); session.save(student2); //提交事务 transaction.commit(); session.close(); }
Hibernate: alter table student add constraint FKrahcsicxucn7bhee8empkb42c foreign key (gid) references grade (id) Hibernate: alter table student_course add constraint FKkx4bkddvbfs0ese9v7hc5rycg foreign key (cid) references course (id) Hibernate: alter table student_course add constraint FK8era63dfxi3csvjpresf6fdgu foreign key (sid) references student (id) Hibernate: insert into course (name) values (?) Hibernate: insert into course (name) values (?) Hibernate: insert into course (name) values (?) Hibernate: insert into grade (name) values (?) Hibernate: insert into student (name, gid) values (?, ?) Hibernate: insert into student (name, gid) values (?, ?) Hibernate: insert into student_course (sid, cid) values (?, ?) Hibernate: insert into student_course (sid, cid) values (?, ?) Hibernate: insert into student_course (sid, cid) values (?, ?) Hibernate: insert into student_course (sid, cid) values (?, ?) Hibernate: insert into student_course (sid, cid) values (?, ?)
属性 | 描述 |
---|---|
save-update | 在进行保存或更新时,进行级联操作。 |
delete | 在进行删除操作时,进行级联操作。 |
delete-orphan | 孤儿删除,删除和当前对象解除关联关系的对象。 该属性值仅在关联关系为一对多时有效,因此只有此时才会存在父子关系,其中“一”的一方为“父方”,“多”的一方为“子方”; 例如,班级和学生是一对多的关系,其中班级为“父方”,学生为“子方”,当学生与班级解除了关联关系后,其外键被重置为了 null,那么这个学生也就失去了他的学生身份,这种记录就需要从学生表中删除。 |
all | 所有情况下均进行级联操作, delete-orphan (孤儿删除)除外。 |
all-delete-orphan | 所有情况下均进行级联操作, 包括 delete-orphan (孤儿删除)。 |
none | 默认值,表示所有情况下,均不进行级联操作。 |
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Grade" table="grade" schema="bianchengbang_jdbc"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"></generator> </id> <property name="name" column="name" length="100" type="java.lang.String"/> <!--设置 cascade 属性为 save-update,在保存班级信息时,级联保存学生信息--> <set name="students" inverse="false" cascade="save-update"> <key column="gid"></key> <one-to-many class="net.biancheng.www.po.Student"></one-to-many> </set> </class> </hibernate-mapping>
注意:使用 cascade 属性进行级联操作时,其必须具备管理或控制关联关系的能力,即其 inverse 属性必须取值为 false(默认值)。2. 修改映射文件 Student.hbm.xml,在 <set> 标签中,设置 cascade 属性的值为 save-update,以达到保存学生信息时,级联保存选课信息的目的,具体配置如下。
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Student" table="student" schema="bianchengbang_jdbc" lazy="true"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"></generator> </id> <property name="name" column="name" length="100" type="java.lang.String"></property> <many-to-one name="grade" class="net.biancheng.www.po.Grade" column="gid" /> <!--设置 cascade 属性为 save-update,通过 student 进行级联保存--> <set name="courses" table="student_course" cascade="save-update"> <key column="sid"></key> <many-to-many class="net.biancheng.www.po.Course" column="cid"></many-to-many> </set> </class> </hibernate-mapping>
@Test public void testCascadeSave() { Session session = HibernateUtils.openSession(); Transaction transaction = session.getTransaction(); //开启事务 transaction.begin(); //创建班级 Grade grade = new Grade(); grade.setName("三年级"); Grade grade2 = new Grade(); grade2.setName("四年级"); //新建三个课程 Course course = new Course(); course.setName("Java 基础"); Course course2 = new Course(); course2.setName("Java 面向对象 "); Course course3 = new Course(); course3.setName("Java 高级特性"); //创建是三个学生 Student student = new Student(); student.setName("张三"); //学生选课 student.getCourses().add(course); student.getCourses().add(course2); student.getCourses().add(course3); Student student2 = new Student(); student2.setName("李四"); //学生选课 student2.getCourses().add(course); student2.getCourses().add(course2); Student student3 = new Student(); student3.setName("赵六"); //学生选课 student3.getCourses().add(course2); student3.getCourses().add(course3); //将学生分配到班级中 grade.getStudents().add(student); grade.getStudents().add(student2); grade2.getStudents().add(student3); //只保存班级信息,学生和选课信息则通过级联保存 session.save(grade); session.save(grade2); //提交事务 transaction.commit(); //释放资源 session.close(); }
<property name="hibernate.hbm2ddl.auto">create</property>
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Grade" table="grade" schema="bianchengbang_jdbc"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"></generator> </id> <property name="name" column="name" length="100" type="java.lang.String"/> <!--设置 cascade 属性为 save-update,delete--> <set name="students" inverse="false" cascade="save-update,delete"> <key column="gid"></key> <one-to-many class="net.biancheng.www.po.Student"></one-to-many> </set> </class> </hibernate-mapping>
注意:cascade 属性可以包含多个值,中间用“,”隔开。2. 在测试类 MyTest 中,添加一个名为 testCascadeDelete 测试方法,删除“四年级”的信息,代码如下。
@Test public void testCascadeDelete() { Session session = HibernateUtils.openSession(); Transaction transaction = session.getTransaction(); //开启事务 transaction.begin(); // HQL 查询四年级信息 Query query = session.createQuery("from Grade WHERE name=?1"); query.setParameter(1, "四年级"); List<Grade> resultList = query.getResultList(); for (Grade grade : resultList) { //删除四年级的信息 session.delete(grade); } //提交事务 transaction.commit(); //释放资源 session.close(); }
图6:级联删除结果
从查询结果可以看出,我们在删除班级信息时,还同时级联删除了相关的 student(学生)和中间表(student_course)的信息。
Student.hbm.xml 在维护 Student 和 Course 关联映射时,并没有通过 cascade 属性开启级联删除功能,因此课程信息没有被级联删除。
级联操作是具有方向性的,在决定级联删除的方向时,需要以现实需求为标准,否则会出现不符合常理的错误,例如,级联删除的方向是从 student 到 grade 的话,则就会出现因为一个学生而删掉整个班级的尴尬局面。
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="net.biancheng.www.po.Grade" table="grade" schema="bianchengbang_jdbc"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"></generator> </id> <property name="name" column="name" length="100" type="java.lang.String"/> <!--设置 cascade 属性为 delete-orphan(孤儿删除)--> <set name="students" inverse="false" cascade="save-update,delete-orphan"> <key column="gid"></key> <one-to-many class="net.biancheng.www.po.Student"></one-to-many> </set> </class> </hibernate-mapping>
@Test public void testDeleteOrphan() { Session session = HibernateUtils.openSession(); Transaction transaction = session.getTransaction(); //开启事务 transaction.begin(); // HQL 查询三年级信息 Query query = session.createQuery("from Grade WHERE name=?1"); query.setParameter(1, "三年级"); List<Grade> gradeList = query.getResultList(); //遍历结果集 for (Grade grade : gradeList) { //HQL 查询名为张三的学生信息 Query query1 = session.createQuery("from Student where name=?1"); query1.setParameter(1, "张三"); List<Student> studentList = query1.getResultList(); //将学生张三与班级解除关系,使之称为孤儿 grade.getStudents().removeAll(studentList); } //提交事务 transaction.commit(); //释放资源 session.close(); }
注意,在介绍级联保存时,我们为了防止其他数据的干扰,而将核心配置文件 hibernate.cfg.xml 中 hibernate.hbm2ddl.auto 属性设置为了 create,这会导致每次执行程序时,都重新创建数据库表。在执行级联删除或孤儿删除时,需要我们重新将 hibernate.hbm2ddl.auto 属性设置为 update。
什么是 hibernate 和n- hibernate ?我可以在 Visual Studio 2008 中使用它进行 C# Web 应用程序开发吗?请给我建议...我是 asp.net Web 应用
我有一个不系统地发生的异常(exception)。 我试图通过在每次迭代中刷新和清理 session 来解决此问题,但没有成功。 [quartzScheduler_Worker-7] ERROR jd
使用 Hibernate 在数据库中存储 IP 地址的最佳类型是什么? 我虽然是 Byte[] 或 String,但有没有更好的方法,或者你用什么? @Column(name = "range_fr
我正在尝试制定一个公式来选择用户个人资料的用户友好名称。它选择名字 + ' ' + 姓氏 如果其中至少有一个不为空且不为空(包含非空白字符),否则选择 短名称 (条件相同),最后,如果 短名称 为空或
在hibernate中,是否可以将鉴别器作为一个实体?例如,如果我将 Department 作为基类,将 AdminDepartment 和 ProcessingDepartment 作为子类。 De
我只想从表中获取一些列值。因此,我已经使用投影来实现这一目标。该代码有效,但我认为它无效。 我的问题是当我使用ProjectionsList并将标准条件列表设置为ArrayList时-Bulletin
你好: 我对 hibernate 缓存缓存的内容感到困惑。 从文档中,我知道 hibernate 中有缓存类型。 一级 :交易级别。 似乎要被 session 持久化的实体被缓存在这里。 二级缓存 :
我遇到了一个情况: save或update hibernate 的目标表中的某些数据 在目标表上有一个触发器,该触发器将在目标表的insert或update操作之前执行 由 hibernate 将此记
我有一个名为 Master_Info_tbl 的表。它是一个查询表: 这是该表的代码: @Entity @Table(name="MASTER_INFO_T") public class Code
我想知道如何在 Hibernate 查询语言中使用日期文字。我在我的 JPA 项目中做了如下操作(作为 Eclipselink 提供者)并且它工作正常。 SELECT m FROM Me m WHER
@Entity public class Troop { @OneToMany(mappedBy="troop") public Set getSoldiers() { ...
我正在尝试使用 hibernate 查询删除表 'user_role' 中的所有行。但每次我都会出错。有人可以帮我吗。 DaoImpl @Override public void deleteAll(
不是将数据库操作分散在四个 (osgi) 包中,而是在那里做略有不同的事情。我想创建一个负责所有持久性问题的(简单的)OSGi 包。我觉得这并不像听起来那么简单,因为“每个包都有独特的类加载器”。 因
这就是我使用生成器的方式: private Integer id; 我看到的行为是: 创建第一个对象 hibernate 分配 id = 1 删除该对象 关闭服务
对象级别的实体和值类型有什么区别。我知道实体将有一个 id 但值不会,但为什么我们需要不同的方法来映射实体与值类型? 这样做是为了让hibernate可以对值类型应用任何优化吗? 最佳答案 一个实体已
我正在使用 HibernateTemplate.findByCriteria 方法进行一些查询。现在我想在标准上创建一些 SQL 限制,比如 criteria.add(Restrictions.sql
所以我有以下代码: Query query = session.createQuery("from Weather"); List list = query.list();
如何使用Hibernate映射具有多个实体的 View ? 问候, 混沌 最佳答案 请参见Hibernate文档中第5.1.3节“类”,紧接在“Id”节之前: There is no differen
据我所知,Hibernate 有两种类型的实现 JPA的实现(2)(@Entity,@Table注解) 扩展到旧的(传统的) hibernate (没有 JPA),使用 HSQL 查询,没有注释 如果
我需要一个将条目存储为键值对的集合(因此我可以通过键查找值),但我需要一个允许多个值使用 hibernate 共享同一个键的集合 最佳答案 一个键具有多个值的映射称为多映射 - 在 Apache 公共
我是一名优秀的程序员,十分优秀!