gpt4 book ai didi

java - JPA--无法实例化抽象类异常

转载 作者:行者123 更新时间:2023-11-29 09:20:36 24 4
gpt4 key购买 nike

FundOperationItem.java

@Entity
@Table(name = "OPERATION_ITEMS")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "D_TYPE", discriminatorType = DiscriminatorType.INTEGER)
public abstract class FundOperationItem implements Serializable {

@ManyToOne(fetch = FetchType.LAZY, optional=false)
@JoinColumn(name = "PARENT_OPERATION_ID", nullable=false)
private FundOperation operation;

public FundOperation getOperation() {
return this.operation;
}

public void setOperation(final FundOperation operation) {
this.operation = operation;
}

}

ExchangeOperationItem.java

@Entity
@Table(name = "EXCHANGE_OPERATION_ITEMS")
@DiscriminatorValue(value="2")
public class ExchangeOperationItem extends FundOperationItem {

}

SimpleOperationItem.java

@Entity
@Table(name = "SIMPLE_OPERATION_ITEMS")
@DiscriminatorValue(value="1")
public class SimpleOperationItem extends FundOperationItem {

}

FundOperation.java

@Entity
@Table(name = "OPERATIONS")
public class FundOperation implements java.io.Serializable{

@OneToMany(cascade = CascadeType.ALL, mappedBy = "operation", fetch = FetchType.LAZY)
private List<FundOperationItem> operationItems = new ArrayList<FundOperationItem>();

public List<FundOperationItem> getOperationItems() {
return this.operationItems;
}

public void setOperationItems(final List<FundOperationItem> operationItems) {
this.operationItems = operationItems;
}

}

以这种方式使用它:

@Test
public void test(){
FundOperation oper = operationRepository.findById(1L);
System.out.println(oper.getOperationItems().size());
}

遇到这样的异常:

org.apache.openjpa.persistence.ArgumentException:无法实例化对象 ID 为“rba.pm.persistency.operation.FundOperationItem-1”的“rba.pm.persistency.operation.FundOperationItem”类型的抽象类;这可能表明该类的继承鉴别器配置不正确。

数据库内容:

Insert into OPERATIONS (OPERATION_ID) values (1);
Insert into OPERATIONS (OPERATION_ID) values (2);
Insert into OPERATIONS (OPERATION_ID) values (3);

Insert into OPERATION_ITEMS (OPERATION_ITEM_ID,PARENT_OPERATION_ID,D_TYPE) values (1,1,1);
Insert into OPERATION_ITEMS (OPERATION_ITEM_ID,PARENT_OPERATION_ID,D_TYPE) values (2,2,1);
Insert into OPERATION_ITEMS (OPERATION_ITEM_ID,PARENT_OPERATION_ID,D_TYPE) values (3,3,1);

Insert into SIMPLE_OPERATION_ITEMS (OPERATION_ITEM_ID) values (1);
Insert into SIMPLE_OPERATION_ITEMS (OPERATION_ITEM_ID) values (2);
Insert into SIMPLE_OPERATION_ITEMS (OPERATION_ITEM_ID) values (3);

我是不是做错了什么?

更新:

**有一个解决方案,如果在新行上面添加测试

    SimpleOperationItem sio = new SimpleOperationItem();

有效

    @Test
public void test(){
SimpleOperationItem sio = new SimpleOperationItem();
FundOperation oper = operationRepository.findById(1L);
System.out.println(oper.getOperationItems().size());
}

注意:对象“sio”与“oper”没有任何关系。

有什么想法吗?这是类加载器的问题吗?这是一个已知问题吗?

最佳答案

没有对此进行测试,但请在 FundOperationItem 中尝试以下操作:

@DiscriminatorValue(value="0")

关于java - JPA--无法实例化抽象类异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com