Спасибо вам обоим за ваши ответы. Я продолжал экспериментировать, и вот что у меня получилось:
@Entity
@Table(name = "paper_cheque_stop_metadata")
@org.hibernate.annotations.Entity(mutable = false)
public class PaperChequeStopMetadata implements Serializable, SecurityEventAware {
private static final long serialVersionUID = 1L;
@SuppressWarnings("unused")
@Id
@Column(name = "paper_cheque_id")
@AccessType("property")
private long id;
@OneToOne(cascade = {}, fetch = FetchType.EAGER, optional = false, targetEntity = PaperCheque.class)
@PrimaryKeyJoinColumn(name = "paper_cheque_id")
@JoinColumn(name = "paper_cheque_id", insertable = true)
@NotNull
private PaperCheque paperCheque;
@XmlAttribute(namespace = XMLNS, name = "paper-cheque-id", required = true)
public final long getId() {
return this.paperCheque.getId();
}
public final void setId(long id) {
//this.id = id;
//NOOP, this is essentially a pseudo-property
}
}
Это, конечно, отвратительный взлом, но он получает все, что я хотел. Средства доступа к свойству paperCheque обычные (не показаны). Я сталкивался с подобной проблемой однонаправленного отображения OneToOne раньше и согласился на гораздо худшие решения, но на этот раз я решил, что собираюсь выяснить, поэтому я продолжал хакать на это. Еще раз, спасибо вам обоим за ответы, это очень ценится.