Я пытаюсь отобразить ассоциацию гибернации как Java.util.Map.В таблице каналов есть столбец merchant_account_id. Таблица торговых счетов не ссылается на таблицу каналов.Он имеет только merchant_account_id, param_name и param_value.merchant_account_id может появляться более одного раза с разными значениями param_name.
Что я делаю не так?карта пуста, если только merchant_account_id не появится в таблице торгового счета только один раз.
@Entity
@Table(schema = "P", name = "CHANNEL")
public class ChannelEntity implements ProcessingChannel, PersistentEntity<Long> {
private enum ParamName {
SE_NUMBER,
SUBMITTER_ID
}
@Id
@Column(name = "CHANNEL_ID")
private Long id;
@OneToMany(targetEntity = MerchantAccountEntity.class, fetch = FetchType.EAGER)
@JoinColumn(name = "MERCHANT_ACCOUNT_ID")
@MapKey(name = "id.paramName")
private Map<String, MerchantAccountEntity> merchantAccount = new HashMap<>();
public Map<String, MerchantAccountEntity> getMerchantAccount() {
return merchantAccount;
}
@Override
public String getSeNumber() {
return getStringValue(ParamName.SE_NUMBER);
}
@Override
public String getSubmitterId() {
return getStringValue(ParamName.SUBMITTER_ID);
}
private String getStringValue(ParamName paramName) {
if (merchantAccount.containsKey(paramName.name())) {
return merchantAccount.get(paramName.name()).getParamValue();
}
return null;
}
}
@Entity
@Table(schema = "P", name = "MERCHANT_ACCOUNT")
public class MerchantAccountEntity implements MerchantAccount, PersistentEntity<String> {
@EmbeddedId
private MerchantAccountEntityPK id;
@Column(name = "PARAM_VALUE")
private String paramValue;
@Override
public String getId() {
return id.getId();
}
@Override
public String getParamName() {
return id.getParamName();
}
@Override
public String getParamValue() {
return paramValue;
}
}
@Embeddable
public class MerchantAccountEntityPK implements Serializable {
private static final long serialVersionUID = 4598402273070888330L;
@Column(name = "MERCHANT_ACCOUNT_ID")
private Long merchantAccountId;
@Column(name = "PARAM_NAME")
private String paramName;
public String getId() {
return merchantAccountId + "+" + paramName;
}
public String getParamName() {
return paramName;
}
}