首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hbernate Annotation多对多投射

2012-10-28 
Hbernate Annotation多对多映射Annotation用起来真是太方便了,多对多映射很需要很少的几个注解就可以搞定.

Hbernate Annotation多对多映射
Annotation用起来真是太方便了,多对多映射很需要很少的几个注解就可以搞定.
需要的jar包是ejb3-persistence.jar(见附件)

实例:用户表:userCREATE TABLE user(    id                  BIGINT          NOT NULL,    optimistic          INT,    userName            VARCHAR(32),    password            VARCHAR(128),    PRIMARY KEY (id));角色表CREATE TABLE role(    id             BIGINT           NOT NULL,    optimistic     INT,    name           VARCHAR(50),    active         SMALLINT         NOT NULL,    PRIMARY KEY (id));角色用户关系表CREATE TABLE roles2users(    users_fk    BIGINT,    roles_fk    BIGINT)关系表不要映射成实体,也就是说我们的java代码只有2个类,user类和role类。[b]java代码[/b]user对象和role对象都继承自同一个父类,父类封装了id和hibernate版本控制的字段还有equals和hashcode方法:@MappedSuperclasspublic class AutoIDEntity implements java.io.Serializable{    private static final long serialVersionUID = 1L;    private Long id;    private Integer optimistic;    @Id    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SEQ_STORE")    public Long getId() {      return this.id;    }    @Version    public Integer getOptimistic() {      return this.optimistic;    }protected void setId(Long id) {this.id = id;}protected void setOptimistic(Integer optimistic) {this.optimistic = optimistic;}@Overridepublic boolean equals(final Object other) {if (!(other instanceof AutoIDEntity))return false;AutoIDEntity castOther = (AutoIDEntity) other;return new EqualsBuilder().append(id, castOther.getId()).isEquals();}@Overridepublic int hashCode() {return new HashCodeBuilder().append(id).toHashCode();}}[b]User类[/b][size=small][/size]@Entity@org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)@SequenceGenerator(name="SEQ_STORE",sequenceName="user_id_sequence")public class User  extends AutoIDEntity {    /**     * 登录名     */    private String userName;    /**     * 密码     */    private String password;    /**     * 角色集合     */    private Set<Role> roles = new HashSet<Role>();      @ManyToMany(fetch = FetchType.EAGER)    @JoinTable(name = "ROLES2USERS",    joinColumns =  {        @JoinColumn(name = "USERS_FK", nullable = false, insertable = true, updatable = true, columnDefinition = "BIGINT")    },    inverseJoinColumns =  {        @JoinColumn(name = "ROLES_FK", nullable = false, insertable = true, updatable = true, columnDefinition = "BIGINT")    }    )    public Set<Role> getRoles() {        return this.roles;    }//省略getter和setter方法}[b]角色实体[/b][size=medium][/size]@Entity@org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)@SequenceGenerator(name="SEQ_STORE",sequenceName="role_id_sequence")public class Role extends AutoIDEntity {    /**     * 角色名     */    private String name;    /**     * 用户集合     */    private Set<User> users = new HashSet<User>();    /**     * 该角色的状态,1为有效,0为无效     */    private boolean active = true;        @ManyToMany(fetch = FetchType.LAZY,mappedBy="roles")public Set<User> getUsers() {return users;   }  //省略其它的getter和setter方法  }


热点排行