各个类的基本关系如上图。
配置如下:
@Entity
@Table(name = "user")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@OneToMany(mappedBy = “userRole”,fetch = FetchType.LAZY)
private Collection<UserRole> userRoles;
//构造空的构造器
public User(){}
//此处省略所有的getter和setter方法
}
注解解释:
@Entity标注该类是一个实体类(类分为实体类,边界类和控制类详见http://baike.baidu.com/view/1545941.htm)
@Table(name = “user”)该类对应数据库中的表。
@Cache(strategy = GenerationType.IDENTITY)定义缓存策略,缓存的方式有四种,分别为:
CacheConcurrencyStrategy.NONE
CacheConcurrencyStrategy.READ_ONLY,只读模式,在此模式下,如果对数据进行更新操作,会有异常;
CacheConcurrencyStrategy.READ_WRITE,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;
CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不严格的读写模式则不会的缓存数据加锁;
CacheConcurrencyStrategy.TRANSACTIONAL,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持JTA环境。
@Id标注该字段是id
@GeneratedValue(strategy = GenerationType.IDENTITY)注解id的生成策略,有四种生成策略——TABLE使用特定的数据库表格保存主键。
SEQUENCE根据底层数据库的序列生成主键,前提是数据库支持序列化。IDENTITY自动生成。AUTO程序控制生成。
@OneToMany(mappedBy = "userRole")mappedBy指向维护端的表,也就是说userRole做级联操作。同时就不再创建第三张表。
UserRole端的代码是:@ManyToOne @JoinColumn(name = “user_id”)