我有四个实体要映射在一起,“Association”、“Account”、“Transaction”和“TransactionEvent”。Association 的 id 是一个简单的整数 id。Account 和 Transaction 每个都有嵌入的 id,由一个到 Association 的映射和一个数字组成。
TransactionEvent 应该有一个嵌入的 id,由一个 Account 和一个 Association 组成。现在,它们中的每一个都映射到一个关联,我希望它与一个 TransactionEvent 的关联相同。
JPA Annotations 用于 Hibernate 映射,但我无法完成这项工作。我尝试为关联键强制使用相同的列名,但 Hibernate 抱怨重复的列。
这有可能解决吗,还是我没有直接思考?
这是带注释的类,但我从 javax.persistence 命名空间中删除了 getter/setter 和非 id 列、注释:
@Entity
public class Association implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private long id;
}
@Embeddable
public class AccountPK implements Serializable {
@ManyToOne(optional=false)
private Association association;
@Column(nullable=false)
private int number;
}
@Embeddable
public class TransactionPK implements Serializable {
@ManyToOne
private Association association;
@GeneratedValue(strategy=GenerationType.AUTO)
private long number;
}
@Embeddable
public class AccountEventPK implements Serializable {
@ManyToOne(optional=false)
@JoinColumns({
@JoinColumn(name="association_id", referencedColumnName="association_id"),
@JoinColumn(name="account_number", referencedColumnName="number")
})
private Account account;
@ManyToOne(optional=false)
@JoinColumns({
@JoinColumn(name="association_id", referencedColumnName="association_id"),
@JoinColumn(name="transaction_number", referencedColumnName="number")
})
private Transaction transaction;
}
实际的 Account、Transaction 和 AccountEvent 实体在表单上
@Entity
public class Account implements Serializable {
@EmbeddedId
private AccountPK id;
}