JPA определяет отношения в поле, которое требует преобразования типа - PullRequest
5 голосов
/ 25 ноября 2010

Я хочу объединить две таблицы в столбце «поставщик», В таблице счетов тип поставщика - целое число, в таблице поставщика - тип varchar (10).

Можно ли выполнить преобразование типа, а также иметь отношения?

@Entity
public class Vendor
{
    private String id;

    @Id(Column="vendor")
    public String getId(){ ... }
}

@Entity
public class Invoice
{
    private Vendor vendor;

    @One-to-one
    public Vendor getVendor() { ... }
}

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Насколько я знаю, использование сводной таблицы (как вы бы представляли отношение многих ко многим) было бы правильным способом сделать это.

Примерно так должно работать:

@Entity
public class Invoice
{
    @JoinTable(name = "invoice_vendor", joinColumns = {
        @JoinColumn(name = "invoice", referencedColumnName = "vendor_id")}, inverseJoinColumns = {
        @JoinColumn(name = "vendor", referencedColumnName = "id")})
    @OneToOne
    private Vendor vendor;
}

Где таблица invoice_vendor имеет целочисленный идентификатор в столбце id и ссылку varchar в столбце vendor_id.

Также я предполагаю, что вы хотели бы установить отношения ManyToOne между поставщиками, но вы написали одинк одному, так что я оставил это как таковой.

0 голосов
/ 06 октября 2011

Каким провайдером JPA вы пользуетесь?

Кажется, что в Hibernate есть отдельная аннотация для этого (@JoinColumnsOrFormula).Насколько мне известно, EclipseLink не предлагает эту аннотацию.

См. Связанный вопрос по stackoverflow

0 голосов
/ 16 марта 2011

Может быть, это можно сделать с помощью переходного поля

@Entity
public class Employee {
    ...
    private boolean isActive;
    ...
    @Transient
    public boolean getIsActive() {
        return isActive;
    }
    public void setIsActive(boolean isActive) {
        this.isActive = isActive;
    }
    @Basic
    private String getIsActiveValue() {
        if (isActive) {
            return "T";
        } else {
            return "F";
        }
    }
    private void setIsActiveValue(String isActive) {
        this.isActive = "T".equals(isActive);
    }
}

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes#Conversion

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