我有一段关系,我无法弄清楚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通常为null。如何通过将两个空值一起比较为真,让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
}