我有一个关系,我无法弄清楚 JPA 如何(或者即使)可以映射它。
两个表由多个列连接。组合的列是唯一的但不是主键。
@ManyToOne
@JoinColumns({
@JoinColumn(name = "TYPE", referencedColumnName = "TYPE", nullable = false),
@JoinColumn(name = "SUBTYPE", referencedColumnName = "SUBTYPE", nullable = true)
})
private TypeInformation typeInformation;
如果同时指定了 TYPE 和 SUBTYPE,JPA 仅返回 TypeInformation,但 SUBTYPE 经常为空。如何让 JPA 通过将两个空值比较为真来返回匹配的 TypeInformation?
这通常在 SQL 中通过将字段合并为非空值以进行比较来完成。如果数据库返回 null,我可以为 SUBTYPE 列指定一个值吗?
我正在使用的特定 JPA 实现是 Apache 的 OpenJPA 2.0,但我仍然对 Hibernate 或 EclipseLink 等其他实现是否允许此功能感兴趣。
@Entity
@Table(name="TYPE_INFORMATION")
public class TypeInformation implements Serializable {
@EmbeddedId
private TypeInformationPK id;
// other fields and accessors
}
@Embeddable
public class TypeInformationPK {
@Column(name="TYPE")
private String type;
@Column(name="SUBTYPE")
private String subtype;
// No other fields
// accessors
// override equals and hashCode
}