次のエラーに問題があります。
Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/library.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: A Foreign key refering tv.mirada.connect.cashless.parking.model.PaymentInterface from tv.mirada.connect.cashless.parking.model.Merchant has the wrong number of column. should be 0
私は約1日かけて答えを探し、物事を試しましたが、運がありませんでした。実際には双方向アクセスは必要ありません。payment_interfaceからマーチャントテーブルの行を取得できる必要があるだけですが、双方向を含める方が、1から多数への単方向を取得するよりも簡単なようです。
私が使用しているテーブルは、マーチャントテーブルと支払いインターフェーステーブルです。マーチャントテーブルにノードテーブルを直接参照させることはできますが、マーチャントテーブルには支払いインターフェイスの情報の拡張があるため、この方法でマッピングする方が理にかなっています。
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Table(name = "park_merchant")
public class Merchant implements java.io.Serializable {
@Id
@GeneratedValue
@Column(name="id", unique=true, nullable=false)
private Integer id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="payment_interface_node_id", nullable = false)
private PaymentInterface paymentInterface;
@Entity
@Table(name = "park_payment_interface", uniqueConstraints = @UniqueConstraint(columnNames = "name"))
public class PaymentInterface implements java.io.Serializable {
@Id
@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "node_id", unique = true, nullable = false)
private Node node;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "paymentInterface")
private Set<Merchant> merchants = new HashSet<Merchant>(0);
うまくいけば、私は単純なものが欠けているだけです。