`
xhfei
  • 浏览: 115888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hbernate Annotation多对多映射

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

实例:
用户表:user
CREATE 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方法:


@MappedSuperclass
public 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;
	}

	@Override
	public boolean equals(final Object other) {
		if (!(other instanceof AutoIDEntity))
			return false;
		AutoIDEntity castOther = (AutoIDEntity) other;
		return new EqualsBuilder().append(id, castOther.getId()).isEquals();
	}

	@Override
	public 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方法
  
}


分享到:
评论

相关推荐

    HberNate.jar

    在处理多条数据库操作时,可以使用Transaction接口来控制事务的提交和回滚。 四、查询语言HQL与Criteria API Hibernate提供了自己的查询语言——Hibernate Query Language(HQL),类似于SQL,但操作的是对象而...

    spring+hbernate对clob、blob字段的处理

    一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...

    Struts2+Hbernate实现用户增删改查

    Struts2主要用于处理Web层的业务逻辑,而Hibernate则专注于对象关系映射(ORM),简化数据库操作。在这个“Struts2+Hibernate实现用户增删改查”的项目中,我们将探讨如何整合这两个框架来实现一个基础的用户管理...

    struts+spring+hbernate实例

    通过学习和实践这个"struts+spring+hbernate"实例,开发者可以深入了解各框架的核心功能,掌握它们之间的协作机制,这对于提升Java Web开发技能,特别是对于大型复杂项目的理解和构建具有重要意义。同时,这也是一个...

    毕设spring+struts2+hbernate博客系统源码+部署文档+论文.zip

    本项目以“毕设spring+struts2+hbernate博客系统源码+部署文档+论文”为主题,深入探讨了使用Spring、Struts2和Hibernate三大框架构建高效、稳定且易于维护的博客系统的实践过程。 Spring框架是Java企业级应用的...

    hbernate帮助文档(中文版)

    10. **联合映射与多态性**:讲解如何处理继承结构的映射,以及如何实现多态查询。 11. **事件监听与拦截器**:介绍Hibernate的事件系统,允许开发者在特定操作前后插入自定义逻辑,如保存前的验证、加载后的处理等...

    struts + DAO + Hbernate的脚本

    这个过程涉及到了Struts对用户请求的处理,DAO对数据的访问,以及Hibernate对数据库操作的自动化处理,展示了这三个技术如何协同工作,共同完成Web应用的开发。 综上所述,“struts + DAO + Hibernate”的组合为...

    Hibernate3.2官方中文参考手册PDF,Hbernate3.2.jar

    7. **Cascading and Association**:介绍了一对一、一对多、多对一和多对多的关系映射,以及级联操作。 8. **事件和监听器**:允许自定义行为,如在对象持久化时触发某些动作。 9. **性能调优**:提供了优化策略,...

    hibernate-release-5.0.7.Final资源包

    10. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系的映射,这些关系可以在实体类之间建立,使数据操作更加直观。 11. **懒加载和即时加载**:...

    hibernate完整配置文件

    通过对`hibernate.cfg.xml`的调整,你可以定制化你的数据库连接、优化性能,同时通过实体类映射文件,实现对象与数据库之间的无缝转换。这个“hibernate完整配置文件”压缩包应该包含了所有必要的配置和示例,是初学...

    SPRING-HBERNATE:Spring-HBERNATE

    此外,还需编写映射文件或使用JPA的注解来定义实体类和表之间的映射关系。 然后,你可以创建DAO(Data Access Object)接口,该接口定义了对数据库的操作,如增删改查。Spring的HibernateTemplate或者JpaRepository...

    Struts+Spring+Hbernate登录模块简单例子

    一个简单的Struts+Spring+Hibernate的登录模块的代码,含数据库代码和部分简单说明(适合刚接触Struts+Spring+Hibernate框架的开发者); 本例采用myEclipse6.0.1和tomcat6开发,可直接导入myeclipse工程运行...

    struts+hibernate留言板代码

    7. **国际化与本地化**:如果应用支持多语言,那么可能会使用Struts的国际化功能,通过资源文件(如`messages.properties`)来提供不同语言的文本。 8. **安全考虑**:对于留言板应用,需要注意防止SQL注入和XSS...

    struts+hibernate留言板

    Hibernate则在模型层发挥作用,它将Java对象与数据库中的记录进行映射,简化了对数据库的操作。通过编写Hibernate的配置文件和实体类,我们可以方便地进行数据的增删改查操作,而无需直接编写SQL语句。 【分页技术...

    使用struts2+hibernate的框架实现的网上购物代码

    而Hibernate则是一个对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的强大工具。 在这个“使用Struts2+Hibernate的框架实现的网上购物代码”项目中,我们可以了解到如何将这两种框架结合,构建...

    springmvc+spring+hibernate适合新手入门

    最近入职一家公司,使用的 是springmvc框架,之前公司是用的struts2没接触过springmvc,所以这几天学习了一下并写了一个简单的基于注解的demo,数据库用的mysql,就两张表,有外键关联,demo实现了两张表的级联增删...

    hibernate2

    hibernate hibernate

    spring_Framework+经典SQL语句大全+Hibernate中文API

    2. 经典SQL语句的教程或参考手册:这些资料可能包含了SQL的基本语法、高级特性、性能优化技巧等,有助于提升开发者对SQL的掌握程度。 3. Hibernate的中文API文档:对于初学者或者非英语为母语的开发者来说,中文API...

    struts+hibernate+spring 增删改查实例

    通过配置文件(hibernate.cfg.xml),Hibernate可以将Java对象映射到数据库表,实现对象的持久化。开发者无需编写繁琐的SQL语句,只需操作Java对象,Hibernate会自动处理数据库的CRUD(创建、读取、更新、删除)操作...

Global site tag (gtag.js) - Google Analytics