Hibenate-注解

来源:互联网 发布:知否什么时候上映 湖南 编辑:程序博客网 时间:2024/06/07 03:25

注解
注解
三类注解
这里写图片描述
注解含义作用
这里写图片描述
这里写图片描述

ORM标准规范JPA—per
@Table(name=”“) 不管name一不一样,name都写出来吧,做为一种规范。

User.java

@Entity@Table(name = "User")// @Proxy(lazy=false) 默认true 。public class User implements java.io.Serializable {    private static final long serialVersionUID = 5528168703353159357L;    // Fields    private Integer id;    private String name;// 用户名    private String password;// 密码    private String telephone;// 电话    private String username;// 姓名    @Column(name = "ISADMIN")    private String isadmin;// 是否是管理员    private String msg;    // 一个用户可以注册多个房屋,一对多    private Set<House> houses = new HashSet<House>();    @OneToMany(cascade = { CascadeType.ALL },             fetch = FetchType.LAZY,             targetEntity = House.class,            mappedBy="Users") //那个类中House,与我相关的那个属性Users            //@mappedBy 属性简单理解为设定为主表    public Set<House> getHouses() {        return houses;    }    public void setHouses(Set<House> houses) {        this.houses = houses;    }    @Transient    // 临时。    public String getMsg() {        return msg;    }    @Id    // IDENTITY==MYSQL SEQUENCE==ORACLE    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_")    @SequenceGenerator(name = "seq", sequenceName = "SEQ_ID", allocationSize = 3)    // 这个才是序列的名字.all...是间距    @Column(name = "ID")    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 String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getTelephone() {        return telephone;    }    public void setTelephone(String telephone) {        this.telephone = telephone;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    @Column(name = "ISADMIN")    // 在每一个get加上也行。    public String getIsadmin() {        return isadmin;    }    public void setIsadmin(String isadmin) {        this.isadmin = isadmin;    }

House.java

@Entitypublic class House implements java.io.Serializable {    // Fields    private Integer id;    private String title;// 标题    private String description;// 描述    private Double price;// 价格    private Date pubdate;// 发布时间    private Double floorage;// 面积    private String contact;// 联系人    private User users;    // Constructors    /** default constructor */    public House() {    }    @ManyToOne(targetEntity = User.class, fetch = FetchType.LAZY)    @JoinColumn(name = "USER_ID")    public User getUsers() {        return users;    }    public void setUsers(User users) {        this.users = users;    }    @Id    // IDENTITY==MYSQL SEQUENCE==ORACLE    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_")    @SequenceGenerator(name = "seq", sequenceName = "SEQ_ID", allocationSize = 3)    // 这个才是序列的名字.all...是间距    @Column(name = "ID")    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public String getDescription() {        return description;    }    public void setDescription(String description) {        this.description = description;    }    public Double getPrice() {        return price;    }    public void setPrice(Double price) {        this.price = price;    }    public Date getPubdate() {        return pubdate;    }    public void setPubdate(Date pubdate) {        this.pubdate = pubdate;    }    public Double getFloorage() {        return floorage;    }    public void setFloorage(Double floorage) {        this.floorage = floorage;    }    public String getContact() {        return contact;    }    public void setContact(String contact) {        this.contact = contact;    }

hibernate.cfg.xml
由映射文件改为注解之后就要在哈姆雷特的配置文件中由resource更改为CLASS。

<mapping class="cn.jbit.houserent.entity.House" />    <mapping class="cn.jbit.houserent.entity.User" />

Test.java

public class AnnoTest {    public static void main(String[] args) {        Transaction tx = null;        try {            tx = HibernateSessionFactory.getSession().beginTransaction();            User u=new User();            u.setName("注解");            u.setPassword("1231212");            House h=new House();            h.setTitle("注解房屋");            u.getHouses().add(h);//一            h.setUsers(u);//多            //一 有级联操作,保存一方就行了。            HibernateSessionFactory.getSession().save(u);            tx.commit();        } catch (HibernateException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        if (tx != null) {            tx.rollback();        }    }

多对多
这里写图片描述

Employee.java

package common;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.Id;import javax.persistence.ManyToMany;import javax.persistence.Table;/** * Employee entity. @author MyEclipse Persistence Tools */@Entity@Table(name = "EMPLOYEE", schema = "SCOTT")public class Employee implements java.io.Serializable {    // Fields    private Integer empid;    private String empname;    private Set<Project> projects = new HashSet<Project>(0);    // Constructors    /** default constructor */    public Employee() {    }    /** minimal constructor */    public Employee(Integer empid, String empname) {        this.empid = empid;        this.empname = empname;    }    /** full constructor */    public Employee(Integer empid, String empname, Set<Project> projects) {        this.empid = empid;        this.empname = empname;        this.projects = projects;    }    // Property accessors    @Id    @Column(name = "EMPID", unique = true, nullable = false, precision = 6, scale = 0)    public Integer getEmpid() {        return this.empid;    }    public void setEmpid(Integer empid) {        this.empid = empid;    }    @Column(name = "EMPNAME", nullable = false, length = 100)    public String getEmpname() {        return this.empname;    }    public void setEmpname(String empname) {        this.empname = empname;    }    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "employees")    public Set<Project> getProjects() {        return this.projects;    }    public void setProjects(Set<Project> projects) {        this.projects = projects;    }}

Project.java

package common;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.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.Table;/** * Project entity. @author MyEclipse Persistence Tools */@Entity@Table(name = "PROJECT", schema = "SCOTT")public class Project implements java.io.Serializable {    // Fields    private Integer proid;    private String proname;    private Set<Employee> employees = new HashSet<Employee>(0);    // Constructors    /** default constructor */    public Project() {    }    /** minimal constructor */    public Project(Integer proid, String proname) {        this.proid = proid;        this.proname = proname;    }    /** full constructor */    public Project(Integer proid, String proname, Set<Employee> employees) {        this.proid = proid;        this.proname = proname;        this.employees = employees;    }    // Property accessors    @Id    @Column(name = "PROID", unique = true, nullable = false, precision = 6, scale = 0)    public Integer getProid() {        return this.proid;    }    public void setProid(Integer proid) {        this.proid = proid;    }    @Column(name = "PRONAME", nullable = false, length = 100)    public String getProname() {        return this.proname;    }    public void setProname(String proname) {        this.proname = proname;    }    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)    @JoinTable(name = "PROEMP",            joinColumns = { @JoinColumn(name = "RPROID") },            inverseJoinColumns = { @JoinColumn(name = "REMPID") })    public Set<Employee> getEmployees() {        return this.employees;    }    public void setEmployees(Set<Employee> employees) {        this.employees = employees;    }}

注解中的命名查询
在那个类的最上头添加上就可以了。。。感觉没啥意义。。

@NamedQuery(name = "testNamedQuery",            query = "from Dept d left join d.emps e where d.deptno = :deptno")

Test.java

            HibernateSessionFactory.getSession()            .getNamedQuery("testNamedQuery")            .setProperties(null)            .list();

SQL命名查询

@NameNativeQuery(name = "queryName", query = "sql...", resultSetMapping = "mapping")@sqlResultSetMapping(name = "mapping",entities = { @EntityResult(entityClass = District.class),        @EntityResult(EntityClass = Street.class) })
1 0
原创粉丝点击