`
blues1021
  • 浏览: 141326 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

Hibernate注释中的参照完整性和复合主键类解析

    博客分类:
  • SSH
 
阅读更多


在引入了或声明了相关表或类后就能够使用它下面的方法,例如:
(1)@Table(name = "bsp_corp_spl", catalog = "bspdb")
  (2)private BspCorpSplId id;
    private BspCorp bspCorp;
因为要在dao类中使用HQL语句实现SELECT * FROM Table1 t1 WHERE t1.id.name=? AND t1.id.email=?
选出复合主键类的所有记录;所以要在类中实现get整体的方法,此时使用了复合主键类;
复合主键类给出实现equal,hashcode方法。
一、参照实体之间@OneToMany
    1、在被参照端的POJO类中注释:
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="bspCorp")//单向的声明被参照类联级在被参照端声明?

    public Set<BspMySplContact> getBspMySplContacts() {
        return this.bspMySplContacts;
    }
    2、参照端的注释:
 @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CORP_ID", nullable = false, insertable = false, updatable = false)//使用被参照类主键作为外键。
    public BspCorp getBspCorp() {
        return this.bspCorp;
    }


@AttributeOverrides由多个@AttributeOverride注释组成,每个@AttributeOverride表示属性的映射,它的定义如以下所示:

@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)

public @interface AttributeOverride {

String name();

Column column();

}
二、复合主键实体类调用嵌套类:
在使用@AttributeOverride注释应注意以下几方面的问题:
1、了解嵌入类字段的含义
     name属性表示被嵌入类中的属性名称。

    column属性表示,对应所要嵌入的实体类的表,其中的name 为列字段的名称。

  例如将tb_customer表中的customer_zip字段映射为Address嵌入类中的属性zip。代码如下所示:

@AttributeOverride(name = "zip",

column = @Column(name = "customer_zip")

)
2、嵌入类可以多次被引用
      使用嵌入式类的好处是:多个实体中都可以共享一个嵌入式类,方便了对实体的操作。
                         例如现在ContactEO也嵌入Address类,就很方便的映射为以下所示:


public class CustomerEO implements Serializable {
          private Integer id;
           private String name;
            private String nickname;
      ……getter和setter方法省略
              private Address address;
  @Embedded
  @AttributeOverrides( {

                   @AttributeOverride(name = "zip", column = @Column(name = "contact_zip")),

                   @AttributeOverride(name = "line1", column = @Column(name = "contact_line1")),

         })
 public Address getAddress() {

                   return address;
    }

         public void setAddress(Address address) {

                   this.address = address;
   }
}
三、实现复合主键嵌套类中的定义:
package com.bsp.entity;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
/**
 * BspCorpSplId entity.
 * @author Java Web2.0项目开发进阶宝典
 */
@Embeddable
public class BspCorpSplId implements java.io.Serializable {
    // 字段属性  
    private String corpId;
    private String spl;
     /**默认构造器 */
    public BspCorpSplId() {
    }
    @NotNull(message = "编号不能为空")
    @Length(min = 1, max = 5, message = "编号长度应在1至5之间")
    @Column(name = "CORP_ID", nullable = false, length = 5)
//因为在调用了嵌套类的实体类中已经将其初始化,所以此处的字段为已知

    public String getCorpId() {
        return this.corpId;
    }
    public void setCorpId(String corpId) {
        this.corpId = corpId;
    }
    @Column(name = "SPL", nullable = false, length = 5)
    public String getSpl() {
        return this.spl;
    }
    public void setSpl(String spl) {
        this.spl = spl;
    }
    public boolean equals( Object other) {//要实现的两个方法
        if ((this == other))
            return true;
        if ((other == null))
            return false;
        if (!(other instanceof BspCorpSplId))
            return false;
        BspCorpSplId castOther = (BspCorpSplId) other;

        return ((this.getCorpId() == castOther.getCorpId()) || (this
                .getCorpId() != null
                && castOther.getCorpId() != null && this.getCorpId().equals(
                castOther.getCorpId())))
                && ((this.getSpl() == castOther.getSpl()) || (this.getSpl() != null
                        && castOther.getSpl() != null && this.getSpl().equals(
                        castOther.getSpl())));
    }
    public int hashCode() {
        int result = 17;

        result = 37 * result
                + (getCorpId() == null ? 0 : this.getCorpId().hashCode());
        result = 37 * result
                + (getSpl() == null ? 0 : this.getSpl().hashCode());
        return result;
    }
}

分享到:
评论

相关推荐

    Hibernate复合主键

    在复合主键类中,我们需要实现 Serializable 接口,以便 Hibernate 框架可以正确地序列化和反序列化复合主键。 复合主键在 Hibernate 中的使用 在 Hibernate 中,我们可以使用复合主键来唯一标识一个实体。例如,...

    hibernate复合主键配置和使用

    复合主键(Composite Key)是指由两个或更多个列共同组成的主键,这些列的组合具有唯一性,确保了数据的完整性。在数据库设计中,复合主键是解决某些特定情况下的有效手段。 二、Hibernate中的复合主键配置 在...

    hibernate复合主键设置

    在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本教程将深入探讨如何在Hibernate中设置复合主键,并提供一个可直接使用的配置示例。 ...

    hibernate复合主键映射

    在Hibernate中,我们可以通过实现`Serializable`接口并使用`@Embeddable`和`@EmbeddedId`注解来定义和管理复合主键。 首先,我们需要创建一个代表复合主键的类。例如,对于订单明细表,我们可以创建一个名为`...

    hibernate 无主键表映射

    在Hibernate中,对无主键表的操作与普通实体基本相同,只是在保存和查询时需要传入整个复合主键对象。例如,创建一个新的订单: ```java OrderKey key = new OrderKey(); key.setCustomerId("123"); key.setOrderId...

    Hibernate注释深入解析

    在Hibernate中,注释是一种强大的工具,可以简化配置,使得代码更加简洁易读。本篇文章将深入探讨Hibernate注释的使用。 1. **属性和方法注解** Hibernate允许对类的属性或方法进行注解,以声明它们与数据库表的...

    hibernate3 注释生成复合主键或者嵌入式主键的方法及实例.doc

    在实体类(如`UserRole`)中,我们需要使用`@IdClass`注解指定复合主键类,并为每个主键字段添加`@Id`注解。例如: ```java import javax.persistence.Entity; import javax.persistence.Id; import javax....

    hibernate复合主键的实例

    在实际开发中,根据具体需求调整实体和复合主键类的属性,以满足业务场景。 四、总结 复合主键在多字段标识的情况下非常有用,它可以保证数据的完整性。在Hibernate中,通过定义`@Embeddable`的复合主键类和`@...

    Hibernate复合主键.

    **正文** Hibernate是一款广泛应用于Java开发中的对象关系映射(ORM)框架,它极大地简化了数据库操作。...在实际项目中,选择合适的复合主键实现方式以及正确地进行持久化操作,是确保数据一致性与完整性的关键。

    Hibernate-tools解决hbm.xml中文注释乱码和生成实体类注释

    然而,在实际开发过程中,我们可能会遇到一些问题,比如在处理`hbm.xml`文件中的中文注释时出现乱码,或者希望自动生成的实体类中包含有详细的注释。本文将详细介绍如何利用`Hibernate-tools`来解决这些问题,以`...

    演示怎样在Hibernate中使用复合主键

    如果使用Hibernate开发legacy的数据库应用,对于数据库表中有使用字符串作为主键或者使用复合主键情况,那么对于这些情况的影射档是比较麻烦的。该示例应用演示了两张表ITEM和CATEGORY_ITEM表有主外键关系,并且ITEM...

    Hibernate中对数据库复合主键的支持.pdf

    复合主键是指由两个或多个字段共同组成的数据表主键,它可以更好地满足业务需求,并提高数据的一致性和完整性。本文将详细介绍Hibernate中如何支持数据库的复合主键。 #### 二、复合主键的概念 在关系型数据库中,...

    hibernate注释详解

    hibernate注释详解 内含hibernate各种注释说明

    Hibernate复合主键视频2

    请更名为 Hibernate复合主键.part2.rar

    Hibernate复合主键part1

    本章讲解Hibernate中对数据库复合主键的支持

    Hibernate复合主键3

    更名为 Hibernate复合主键.part3.rar

    Java的Hibernate框架中复合主键映射的创建和使用教程

    在Java的Hibernate框架中,复合主键映射是一种处理多列组合成主键的情况,它使得在数据库表中由两个或更多个字段组成的主键能够被正确地映射到实体类。在使用复合主键时,我们需要遵循一定的步骤和规则。 首先,...

Global site tag (gtag.js) - Google Analytics