Hibernate处理没有主键的table

之前用Hibernate映射的表一直都有主键,刚好今天测试的是一张无主键的表,一直报错无法匹配,查了半天原来Hibernate是一定要设置主键了,但是是不是不设置主键就没法处理了?当然不是,可以通过设置复合主键的方式来处理,当然企业环境开发中,所有的表肯定是有主键的,这里只是做一个记录,好了  废话不多少了,开始吧!

本人用的工具开发工具是IDEA+Hibernate4.x+sqlserver,其中涉及到的文件有EmpEntity.java,EmpEntity.hbm.xml,hibernate.cfg.xml

这个三个文件都可以自动生成,这里就不截图了哈,如果不会的同志可以留言,下面分别贴下这三个文件

1、EmpEntity.hbm.xml

<?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="springtest.hibernate.EmpEntity" table="emp" schema="dbo" catalog="model">
        <composite-id>
            <key-property name="empno" column="empno"></key-property>
            <key-property name="ename" column="ename" > </key-property>
            <key-property name="job" column="job" ></key-property>
            <key-property name="hiredate" column="hiredate" ></key-property>
            <key-property name="sal" column="sal" ></key-property>
            <key-property name="comm" column="comm" ></key-property>
            <key-property name="clob" column="clob" ></key-property>
        </composite-id>
    </class>
</hibernate-mapping>

2、hibernate.cfg.xml

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=model</property>
    <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="connection.username">sa</property>
    <property name="connection.password">starlin.cn</property>
    <mapping class="springtest.hibernate.EmpEntity"/>
    <mapping resource="springtest/EmpEntity.hbm.xml"/>
    <!-- DB schema will be updated if needed -->
    <!-- <property name="hbm2ddl.auto">update</property> -->
  </session-factory>
</hibernate-configuration>

3、EmpEntity.java  注意:一定要序列化,不然会报错的

package springtest.hibernate;

import javax.persistence.*;
import java.io.Serializable;

/**
 * Created by starlin
 * on 2015/12/12 20:57.
 */
@Entity
@Table(name = "emp", schema = "dbo", catalog = "model")
public class EmpEntity implements Serializable{
    private String empno;
    private String ename;
    private String job;
    private String hiredate;
    private String sal;
    private String comm;
    private String clob;
    @Basic
    @Column(name = "empno")
    public String getEmpno() {
        return empno;
    }

    public void setEmpno(String empno) {
        this.empno = empno;
    }

    @Basic
    @Column(name = "ename")
    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    @Basic
    @Column(name = "job")
    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    @Basic
    @Column(name = "hiredate")
    public String getHiredate() {
        return hiredate;
    }

    public void setHiredate(String hiredate) {
        this.hiredate = hiredate;
    }

    @Basic
    @Column(name = "sal")
    public String getSal() {
        return sal;
    }

    public void setSal(String sal) {
        this.sal = sal;
    }

    @Basic
    @Column(name = "comm")
    public String getComm() {
        return comm;
    }

    public void setComm(String comm) {
        this.comm = comm;
    }

    @Basic
    @Column(name = "clob")
    public String getClob() {
        return clob;
    }

    public void setClob(String clob) {
        this.clob = clob;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        EmpEntity empEntity = (EmpEntity) o;

        if (empno != null ? !empno.equals(empEntity.empno) : empEntity.empno != null) return false;
        if (ename != null ? !ename.equals(empEntity.ename) : empEntity.ename != null) return false;
        if (job != null ? !job.equals(empEntity.job) : empEntity.job != null) return false;
        if (hiredate != null ? !hiredate.equals(empEntity.hiredate) : empEntity.hiredate != null) return false;
        if (sal != null ? !sal.equals(empEntity.sal) : empEntity.sal != null) return false;
        if (comm != null ? !comm.equals(empEntity.comm) : empEntity.comm != null) return false;
        if (clob != null ? !clob.equals(empEntity.clob) : empEntity.clob != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = empno != null ? empno.hashCode() : 0;
        result = 31 * result + (ename != null ? ename.hashCode() : 0);
        result = 31 * result + (job != null ? job.hashCode() : 0);
        result = 31 * result + (hiredate != null ? hiredate.hashCode() : 0);
        result = 31 * result + (sal != null ? sal.hashCode() : 0);
        result = 31 * result + (comm != null ? comm.hashCode() : 0);
        result = 31 * result + (clob != null ? clob.hashCode() : 0);
        return result;
    }

}

4、最后一个测试类Test.java

package springtest.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

/**
 * Created by starlin
 * on 2015/12/11 22:58.
 */
public class Test {
    public static void main(String[] args) {
        EmpEntity empEntity = new EmpEntity();
        empEntity.setEmpno("9000");
        empEntity.setEname("hibernate");
        empEntity.setJob("test");
        empEntity.setHiredate("2015-12-12");
        empEntity.setSal("3000");
        empEntity.setComm("sfsf");
        empEntity.setClob("clob");
        //实例化Configuration,这行代码默认加载hibernate.cfg.xml文件
        Configuration configuration = new Configuration().configure();
        //以Configuration创建SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        //实例化session
        Session session = sessionFactory.openSession();
        //开始事物
        Transaction transaction = session.beginTransaction();
        //保存消息
        session.save(empEntity);
        //提交事物
        transaction.commit();
        //关闭session
        session.close();
    }
}
 

5、测试log

6、数据库成功插入

以上,感谢观看,有问题请留言

时间: 2024-10-06 19:25:25

Hibernate处理没有主键的table的相关文章

hibernate里联合主键composite-id映射,查询单个主键的问题(转)

今天项目中遇到这个问题,搞了大半天,我郁闷...hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbWjjc" table="bb_wjjc" schema="dbo" catalog="wjgl">        <composite-id name="id" class="com.cskj.hi

hibernate里联合主键composite-id映射,查询单个主键的问题

今天项目中遇到这个问题,搞了大半天,现在记录下来hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbWjjc" table="bb_wjjc" schema="dbo" catalog="wjgl"> <composite-id name="id" class="com.cskj.hibernate

Hibernate 表映射 主键生成策略与复合主键

主要分析三点: 一.数据表和Java类的映射 : 二.单一主键映射和主键的生成策略 : 三.复合主键的表映射 : 一.数据表和Java类的映射  Hibernate封装了数据库DDL语句,只需要将数据表和类之间实现映射,即可对数据表进行操作. 示例:数据库中存在表interface_admin.ds_area,实现表和类之间映射,其中单一主键oggKeyId,使用主键自动生成策略UUID,具体第二点进行阐述 . package com.pec.model; import java.io.Seri

Hibernate配置文件hbm主键的generator可选项

1.自动增长identity适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用)数据库中的语法如下:MySQL:create table t_user(id int auto_increment primary key, name v

hibernate映射-基于主键映射的1-1关联关系

(学习记录,错误不足之处,请您耐心指正^_^) hibernate映射-基于主键映射的1-1关联关系 基于主键的映射策略:指一端的主键生成器使用foreign策略,表明根据对方的主键来生成自己的主键,自己并不独立生成主键. 一.代码示例: {类文件↓} Manager.class 1 package com.zit.hibernate.one2one.primary; 2 3 public class Manager { 4 5 private Integer mgrId; 6 private

Hibernate常用的主键生成策略

1.自动增长identity 适用于MySQL.DB2.SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用) 数据库中的语法如下: MySQL:create table t_user(id int auto_increment primary key, name

Hibernate学习:主键生成策略

一:标准的JPA  Annotation方式的主键生成策略: (1)AUTO - 可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库. 例如mysql会使用auto_increment;如果oracle数据库,则使用hibernate_sequence. (2)TABLE - 使用表保存id值(也就是会为应用的表创建一张专门保存Id的表,记录对应的表的对应最大的ID值) (3)IDENTITY - identity column (4)S

hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化类的主键生成主键的实体的映射文件 首先需要指定主键生成方式为foreigner 格式为: <id name="departmentId" type="java.lang.Integer"> <column name="department_i

Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)

Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessionFactory; static{ //获取配置信息 hibernate.cfg.xml Configuration configuration = new Configuration().configure(); //创建一个 ServiceRegistry的实例 //首先获得其标准建造器,此处用