Hibernate映射组件属性

一、映射普通的组件属性

组件就是一个自定义类型,在持久化类中,如果一个属性的类型不是基本数据类型,那么应该怎么将其映射为数据表呢?
直接看个例子:

@Entity
@Table(name="person")
public class Person {

    @Id @Column(name="person_id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    @Column(name="person_age")
    private int age;

    private Name name;

    //省略所有setter、getter方法
}

这是一个持久化类,它有一个Name类型的属性,Name是自定义的一个类型,若想对Name组件进行映射,需要用@Embeddable修饰Name类,并用@Column注解修饰其内部的属性(其属性不是集合时),并在Name类中定义一个持久化类的对象并用@Parent修饰,如下:

@Embeddable
public class Name {

    @Column(name="person_first")
    private String first;

    @Column(name="person_last")
    private String last;

    @Parent
    private Person owner;

    //省略所有setter、getter方法
    //省略无参构造方法、省略first、last两参构造方法
}
二、组件属性为集合

需要参考基本数据类型属性是集合的情况:Hibernate映射集合属性(基本类型)
这种情况下的注解与上节中是相同的,例如:

@Embeddable
public class Name {

    @Column(name="person_first")
    private String first;

    @Column(name="person_last")
    private String last;

    @Parent
    private Person owner;

    @ElementCollection(targetClass=Integer.class)
    @CollectionTable(name="power_inf",joinColumns=@JoinColumn(name="person_name_id",nullable=false))
    @Column(name="name_power",nullable=false)
    @MapKeyColumn(name="name_aspect")
    @MapKeyClass(String.class)
    private Map<String,Integer> power=new HashMap<String, Integer>();

    //省略setter、getter以及构造函数
}

可以看到这和上节是一样的。

二、集合的元素是组件

集合为List或Set时:

//对该集合的映射与上一节对集合的注解基本是一致的
//去掉@Column注解就可以了
private List<Name> nicks=new ArrayList<>();

集合为Map时且Map的Key是组件:

//当Map的key为自定义类型时,必须重写Name类的hashCode()和equal()方法
private Map<Name,Integer> nickPower=new HashMap<Name,Integer>();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值