【问题标题】:JPA select records with fixed primary keys in composite keyJPA在复合键中选择具有固定主键的记录
【发布时间】:2012-08-16 12:37:37
【问题描述】:

我正在尝试将 jpa 中的两个类与 OneToOne 关系相关联。 我有这个复合键的 A 类:

@Embeddable
public static class AId implements Serializable 
{
  private static final long serialVersionUID = -3668842379109008885L;
  private long idA;
  private String codType;
  private Date startDate;



    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((codType == null) ? 0 : codType.hashCode());
        result = prime * result + (int) (idA ^ (idA >>> 32));
        result = prime * result
                + ((startDate == null) ? 0 : startDate.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        AId other = (AId) obj;
        if (codType == null) {
            if (other.codType != null)
                return false;
        } else if (!codType.equals(other.codType))
            return false;
        if (idA != other.idA)
            return false;
        if (startDate == null) {
            if (other.startDate != null)
                return false;
        } else if (!startDate.equals(other.startDate))
            return false;
        return true;
    }
    public long getIdA() {
        return idA;
    }
    public void setIdA(Long idA) {
        this.idA = idA;
    }
    public String getCodType() {
        return codType;
    }
    public void setCodType(String codType) {
        this.codType = codType;
    }
    public Date getStartDate() {
        return startDate;
    }
    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

}

@EmbeddedId
@AttributeOverrides({
    @AttributeOverride(name="idA", column=@Column(name="ID_A")),
    @AttributeOverride(name="codType", column=@Column(name="COD_TYPE")),
    @AttributeOverride(name="startDate", column=@Column(name="START_DATE"))
})
private AId idAId;

和具有简单主键的 B 类

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="GEN_ID_STORE"  )
@Column(name="ID")
private Long id;
@OneToOne(fetch=FetchType.EAGER)
private A a;

现在我的问题是,如何仅使用 idAId.idA 字段关联这两个类?因为我想在我的 B 表中只有 ID_A 列而不是其他列。我更好地解释自己,我的问题是我必须从表 A 中只提取 codType = 'COD' 和 startDate = null 的那些记录,实际上其他两个键并不重要,因为它们是固定的。 我能做什么?

不允许使用桥接表 :D

感谢您的帮助。

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    因为我想在我的 B 表中只有 ID_A 列而不是其他列

    那是my main problem,带有复合键。如果您在一个表中有一个复合键,这意味着所有这些键一起定义了一条记录。因此,如果您需要引用另一个表中的这一记录,则需要拥有所有键。

    因此,简而言之:如果表 A 具有复合主键,则表 B 上不能只有一个字段包含对表 A 上记录的引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 2021-10-07
      • 1970-01-01
      • 2020-02-19
      • 2019-10-13
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多