day58:hibernate04_JPA注解方式实现hibernate CRUD--【用户添加角色没那摩神秘】

这个就是 “请记住我叫叶良辰”一样,先记住大概使用方法。熟练就行。

借鉴模板代码。有问题参考文档:http://pan.baidu.com/s/1mhQ6BcW

最后才百度。


######JPA配置小结:

①一对一:(通常都在一张表里。抽出两张表自找麻烦====极少用到)

②一对多:客户-联系人

少的一方:客户

@Entity
@Table(name="cst_customer")   // jpa的注解都在【javax.persistence包】下面
public class Customer 
{
	
	 @Id
	 @Column(name="cust_id")
	 @GeneratedValue(strategy=GenerationType.IDENTITY)
	 private Integer cust_id;// '客户编号(主键)',
	 
	 @Column(name="cust_name")
	 private String cust_name;//'客户名称(公司名称)',
	 @Column(name="cust_source")
	 private String cust_source;// '客户信息来源',
	 @Column(name="cust_industry")
	 private String cust_industry;// '客户所属行业',
	 @Column(name="cust_level")
	 private String cust_level;// '客户级别',
	 @Column(name="cust_phone")
	 private String cust_phone;// '固定电话',
	 @Column(name="cust_mobile")
	 private String cust_mobile;//'移动电话',
	 
	 // 有多的一方的集合(Set)
	 /*targetEntity:对方的所属类型
	 mappedBy:自己在对方中的【属性名】。==###=【有mappedBy放弃维护外键。】当做inverse="true"来用*/
	@OneToMany(targetEntity=Linkman.class,mappedBy="customer",cascade=CascadeType.REMOVE)
	private Set<Linkman> linkmans=new HashSet();
	 
	
	//====只看上面。先面试构造、get set
多的一方:联系人

@Entity
@Table(name="cst_linkman")
public class Linkman 
{
	  @Id
	  @Column(name="lkm_id")
	  @GeneratedValue(strategy=GenerationType.IDENTITY)
	  private Integer lkm_id;// '联系人编号(主键)',
	  
	  @Column(name="lkm_name") // 数据库的字段名
	  private String lkm_name;// '联系人姓名',
	  @Column(name="lkm_gender") // 数据库的字段名
	  private String lkm_gender;// '联系人性别',
	  @Column(name="lkm_phone") // 数据库的字段名
	  private String lkm_phone;// '联系人办公电话',
	  @Column(name="lkm_mobile") // 数据库的字段名
	  private String lkm_mobile;// '联系人手机',
	  @Column(name="lkm_email") // 数据库的字段名
	  private String lkm_email;// '联系人邮箱',
	  @Column(name="lkm_qq") // 数据库的字段名
	  private String lkm_qq;// '联系人qq',
	  @Column(name="lkm_position") // 数据库的字段名
	  private String lkm_position;// '联系人职位',
	  @Column(name="lkm_memo") // 数据库的字段名
	  private String lkm_memo;// '联系人备注'
	  // 有个一的一方的对象 
	  @ManyToOne(targetEntity=Customer.class,cascade=CascadeType.ALL)
	 /* name:本表外键字段名。######【本表的外键名】
	  referencedColumnName:指向的主键字段名######【对方表的主键名】
	  ===二者可以不同!【从表的外键名和主表的主键名,本就可以不同。】
	  ==######=多对一,多的一方的配置:【 @JoinColumn()是固定格式,只能多加熟练】
	  ==######=理解了OK:【可以看作从表“追加的一列”:JoinColumn】
	  ==@JoinColumn(foreignKey="xxx"是用来修改外键的。(添加-取消) )
	  */
	  @JoinColumn(name="lkm_cust_id",referencedColumnName="cust_id")
	  private Customer customer;

③多对多【看作两个一对多(相对于中间表,都是一)】:用户和角色(最常用的:用户和权限。)

用户:

@Entity
@Table(name="sys_user")
public class User 
{
	@Id
	@Column(name="user_id")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	 private Integer user_id;// '用户id',
	
	@Column(name="user_code")
	 private String user_code;// '用户账号',
	@Column(name="user_name")
	 private String user_name;// '用户名称',
	@Column(name="user_password")
	 private String user_password;// '用户密码',
	@Column(name="user_state")
	 private String user_state;// '1:正常,0:暂停',
	 
	 // 有一个角色的集合
	@ManyToMany(targetEntity=Role.class,cascade=CascadeType.ALL)
		/*name:中间表名称
		joinColumns:自己在中间表中的配置信息
		inverseJoinColumns:对方在中间表的配置信息*/
	@JoinTable(
	name="sys_user_role",
	joinColumns={
			/*name:自己在中间表的外键字段名称
			referencedColumnName:指向的主键字段名称*/
		@JoinColumn(name="user_id",referencedColumnName="user_id")	
	},
	inverseJoinColumns={
				/*name:对方在中间表的外键字段名称
				referencedColumnName: 对方指向的主键字段名称*/
			@JoinColumn(name="role_id",referencedColumnName="role_id")
	})
	 private Set<Role> roles=new HashSet();

角色:

@Entity
@Table(name="sys_role")
public class Role 
{
	@Id
	@Column(name="role_id")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer role_id;// 主键id
	@Column(name="role_name")
	private String role_name;// '角色名称',
	@Column(name="role_memo")
	private String role_memo;//'备注',
		// 有一个用户的集合
		/*targetEntity:对方类型
		mappedBy:自己在对方中的属性名*/
	@ManyToMany(targetEntity=User.class,mappedBy="roles")
	private Set<User> users=new HashSet();


========直接拿来用,借鉴。

注意:

①一对多,从表(含有外键)方,需要配置@JoinColumn。【外键列信息】

②多对多,被动方(角色)//用户添加角色。不需要配置@JoinTable。【中间表信息】配置@JoinTable注意一下语法。==直接拿来用,改改。

③配置了mappedBy属性的一方,放弃了外键维护。===相当于xml方式的inverse=“true”。

【不必深究,用处不多:

只是在删除主表记录时,配置主表,是否放弃外键维护。

### 放弃,主表记录删不掉;没有放弃(默认),从表外键会在主表记录删除后更新为null。】




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值