Hibenate-注解

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

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

@Entity
public 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) })
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunywz

~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值