Отображение OneToOne не работает для абстрактных подклассов - PullRequest
2 голосов
/ 30 декабря 2011

У меня проблема с отображением карт, и мне определенно нужны глазные яблоки.У меня есть абстрактный класс, который имеет подклассы со стратегией наследования одной таблицы.Он содержит контакт, который также должен быть абстрактным классом с той же стратегией наследования.Вот мой код:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
@Table(name = "leads")
@Cache(region = "com.qe.model.Lead", usage = CacheConcurrencyStrategy.READ_WRITE)
public abstract class Lead {
    private Long id;
    protected Contact contact;


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "lead")
    public Contact getContact() {
        return contact;
    }

    public void setContact(Contact contact) {
        this.contact = contact;
    }

}


@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
@Table(name = "contacts")
@Cache(region = "com.qe.model.Contact", usage = CacheConcurrencyStrategy.READ_WRITE)
public abstract class Contact {

    private Long id;
    private Lead lead;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToOne
    @JoinColumn(name = "lead_id")
    public Lead getLead() {
        return lead;
    }

    public void setLead(Lead lead) {
        this.lead = lead;
    }
}
@Entity
@DiscriminatorValue("AUTO")
public class AutoContact extends Contact {
}

Я получаю сообщение об ошибке:

Не удалось определить тип для: com.qe.model.AutoContact, в таблице: приводит, для столбцов: [org.hibernate.mapping.Column (contact)]

Любые идеи будут оценены ...

1 Ответ

0 голосов
/ 30 декабря 2011

Извините, на самом деле ваше отображение выглядит вполне нормально для меня. Сообщение об ошибке озадачивает меня, потому что, очевидно, в таблице leads не должно быть столбца contact. Ваше отображение определяет столбец внешнего ключа в таблице contacts. Также Hibernate должен поддерживать полиморфные взаимно-однозначные ассоциации.

Вы можете попытаться добавить параметр targetEntity к отображению Contact в классе Lead (хотя я сомневаюсь, что это поможет).

@OneToOne(cascade = CascadeType.ALL, mappedBy = "lead", targetEntity = Contact.class)
public Contact getContact() {
  return contact;
}

Вы также можете попытаться удалить модификатор abstract из класса Contact (хотя это может быть и не то, что вы хотите).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...