Я пытаюсь заставить кодер кодирования гобелена работать с комбинированным ключом гибернации. У меня есть следующий код, и я пытаюсь получить составной идентификатор и передать его интерфейсу, где впоследствии он может быть отправлен обратно на сервер для декодирования обратно на объект.Tapestry5 Value Encoder with Hibernate Composite Key
@Embeddable
public class IfasvVendorPK implements Serializable{
@Column(length = 4, nullable = false)
protected String peId;
@Column(length = 8, nullable = false)
protected String peAddrCd;
public IfasvVendorPK() {
}
public IfasvVendorPK(String peId, String peAddrCd) {
this.peId = peId;
this.peAddrCd = peAddrCd;
}
// equals, hashCode
}
@Entity
public class IfasvVendor implements Serializable {
@EmbeddedId
private IfasvVendorPK ifasvVendorPK;
//...
}
Следующий мой кодер значений. ToClient - это то, где мне нужно отправить составной ключ в интерфейс. Я не уверен, как получить составной ключ.
@SuppressWarnings("unchecked")
public LabelAwareValueEncoder getEncoderVendor() {
return new LabelAwareValueEncoder<IfasvVendor>() {
public String toClient(IfasvVendor value) {
return value.getIfasvVendorPK().toString();
}
public IfasvVendor toValue(String clientValue) {
if (clientValue.isEmpty()) {
return null;
}
return (IfasvVendor) session.get(IfasvVendor.class, clientValue);
}
public String getLabel(IfasvVendor value) {
return value.getPeNameU();
}
};
}
Если кто-то может помочь мне лучше понять, как работать с составным ключом, чтобы я мог получить мое значение датчика работает, было бы весьма признателен. Заранее спасибо.
1. Продемонстрируйте реализацию toString() в классе IfasvVendor. 2. Каков тип переменной сеанса? 3. Вы уверены, что объект IfasvVendor доступен в сеансе? Предпочтительнее извлекать его из хранилища данных, чем из сеанса. – Jeshurun