Hibernate Двунаправленный Много к одному

У меня проблема со следующей ошибкой:

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

Я потратил около дня на поиски ответов и попытки, без удачи. На самом деле мне не требуется двунаправленный доступ, мне нужно только иметь возможность получить строку таблицы мерчантов из интерфейса payment_interface, но проще было просто включить двунаправленный, чем пытаться получить однонаправленный от одного ко многим.

Таблицы, которые я использую, - это таблица продавца и таблица интерфейса оплаты. Я понимаю, что таблица торговцев могла бы напрямую ссылаться на таблицу узлов, но таблица торговцев имеет расширение информации в интерфейсе оплаты, поэтому имеет смысл отобразить ее таким образом.

@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);

Надеюсь, мне просто не хватает чего-то простого.

1 ответ

Решение

Ах, нашел решение. Мне нужно было поместить @ManyToOne и @JoinColumn в таблицу Merchant на метод получения, а не на объявление переменной. Я до сих пор не знаю, почему, но, по крайней мере, я знаю, как сейчас.

Другие вопросы по тегам