JPA, временная аннотация не переписывает OneToOne? - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть Продукт суперкласса и Сокращение подкласса. Теперь я хочу, чтобы подкласс переопределил свойство суперкласса, чтобы оно не сохранялось в базе данных. Я ожидал, что он будет работать, как это, но, очевидно, hibernate все еще пытается сохранить свойство ProductType Reduction в базе данных. Есть ли другой способ исправить это?

@Entity
@Table(name="PRODUCT_INSTANCE")
public class Product   {
    private Integer id;
    protected ProductType productType;

    public Product(){

    }

    public Product(ProductType productType) {   
        this.productType = productType;
    }

    @OneToOne
    public ProductType getProductType() {
        return productType;
    }

    public void setProductType(ProductType type) {
        this.productType = type;
    }

    @Transient
    public ProductCategory getCategory() {
        return productType.getCategory();
    }
}

И подкласс:

@Entity
@Table(name="REDUCTION")
public class Reduction extends Product {

    private ProductType type;
    private Integer id;

    public Reduction(Double percentage, Double totalPrice) {

        ProductCategory reductionCat = new ProductCategory("_REDUCTION_", new Color("", 130, 90, 80));
        type = new ProductType();
        type.setBuyPrice(0.0);
        type.setBtw(BTW.PER_0);
        type.setCategory(reductionCat); 
    }

    @Override
    @Transient
    public ProductType getProductType() {
        return type;

    }
}

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Я решил это, используя обходной путь, в Сокращение я положил

@Transient
public ProductType getProductHack(){
    return type;
}

И в классе Product:

@OneToOne
public ProductType getProductType() {
    return productType;
}

public void setProductType(ProductType type) {
    this.productType = type;
}

@Transient
public ProductType getProductHack() {
    return getProductType();
}

public void setProductHack(ProductType type) {
    setProductType(type);
}

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

0 голосов
/ 21 сентября 2011

Вы ищете

@Entity
@Table(name="REDUCTION")
@AttributeOverride(name = "productType", column = @Column(name = "productType", nullable = true, insertable = false, updatable = false))
public class Reduction extends Product {
    @Override
    public ProductType getProductType() {
        return type;

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