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方法
}
分享到:
相关推荐
在处理多条数据库操作时,可以使用Transaction接口来控制事务的提交和回滚。 四、查询语言HQL与Criteria API Hibernate提供了自己的查询语言——Hibernate Query Language(HQL),类似于SQL,但操作的是对象而...
一个完整的工程,主要功能为:spring+hbernate对clob、blob字段的处理 包括:数据脚本、典型的SSH框架处理,以及spring、hibernate数据批量保存等功能源码、所用到的lib包 数据环境为:oracle 10G 开发:Mycelipse5.1...
Struts2主要用于处理Web层的业务逻辑,而Hibernate则专注于对象关系映射(ORM),简化数据库操作。在这个“Struts2+Hibernate实现用户增删改查”的项目中,我们将探讨如何整合这两个框架来实现一个基础的用户管理...
通过学习和实践这个"struts+spring+hbernate"实例,开发者可以深入了解各框架的核心功能,掌握它们之间的协作机制,这对于提升Java Web开发技能,特别是对于大型复杂项目的理解和构建具有重要意义。同时,这也是一个...
本项目以“毕设spring+struts2+hbernate博客系统源码+部署文档+论文”为主题,深入探讨了使用Spring、Struts2和Hibernate三大框架构建高效、稳定且易于维护的博客系统的实践过程。 Spring框架是Java企业级应用的...
10. **联合映射与多态性**:讲解如何处理继承结构的映射,以及如何实现多态查询。 11. **事件监听与拦截器**:介绍Hibernate的事件系统,允许开发者在特定操作前后插入自定义逻辑,如保存前的验证、加载后的处理等...
这个过程涉及到了Struts对用户请求的处理,DAO对数据的访问,以及Hibernate对数据库操作的自动化处理,展示了这三个技术如何协同工作,共同完成Web应用的开发。 综上所述,“struts + DAO + Hibernate”的组合为...
7. **Cascading and Association**:介绍了一对一、一对多、多对一和多对多的关系映射,以及级联操作。 8. **事件和监听器**:允许自定义行为,如在对象持久化时触发某些动作。 9. **性能调优**:提供了优化策略,...
10. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系的映射,这些关系可以在实体类之间建立,使数据操作更加直观。 11. **懒加载和即时加载**:...
通过对`hibernate.cfg.xml`的调整,你可以定制化你的数据库连接、优化性能,同时通过实体类映射文件,实现对象与数据库之间的无缝转换。这个“hibernate完整配置文件”压缩包应该包含了所有必要的配置和示例,是初学...
此外,还需编写映射文件或使用JPA的注解来定义实体类和表之间的映射关系。 然后,你可以创建DAO(Data Access Object)接口,该接口定义了对数据库的操作,如增删改查。Spring的HibernateTemplate或者JpaRepository...
一个简单的Struts+Spring+Hibernate的登录模块的代码,含数据库代码和部分简单说明(适合刚接触Struts+Spring+Hibernate框架的开发者); 本例采用myEclipse6.0.1和tomcat6开发,可直接导入myeclipse工程运行...
7. **国际化与本地化**:如果应用支持多语言,那么可能会使用Struts的国际化功能,通过资源文件(如`messages.properties`)来提供不同语言的文本。 8. **安全考虑**:对于留言板应用,需要注意防止SQL注入和XSS...
Hibernate则在模型层发挥作用,它将Java对象与数据库中的记录进行映射,简化了对数据库的操作。通过编写Hibernate的配置文件和实体类,我们可以方便地进行数据的增删改查操作,而无需直接编写SQL语句。 【分页技术...
而Hibernate则是一个对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的强大工具。 在这个“使用Struts2+Hibernate的框架实现的网上购物代码”项目中,我们可以了解到如何将这两种框架结合,构建...
最近入职一家公司,使用的 是springmvc框架,之前公司是用的struts2没接触过springmvc,所以这几天学习了一下并写了一个简单的基于注解的demo,数据库用的mysql,就两张表,有外键关联,demo实现了两张表的级联增删...
hibernate hibernate
2. 经典SQL语句的教程或参考手册:这些资料可能包含了SQL的基本语法、高级特性、性能优化技巧等,有助于提升开发者对SQL的掌握程度。 3. Hibernate的中文API文档:对于初学者或者非英语为母语的开发者来说,中文API...
通过配置文件(hibernate.cfg.xml),Hibernate可以将Java对象映射到数据库表,实现对象的持久化。开发者无需编写繁琐的SQL语句,只需操作Java对象,Hibernate会自动处理数据库的CRUD(创建、读取、更新、删除)操作...