Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当使用spring数据jdbc从数据库检索聚合子级中的一对多关系时,该子级中的一对多关系映射错误_Java_Spring Data Jdbc - Fatal编程技术网

Java 当使用spring数据jdbc从数据库检索聚合子级中的一对多关系时,该子级中的一对多关系映射错误

Java 当使用spring数据jdbc从数据库检索聚合子级中的一对多关系时,该子级中的一对多关系映射错误,java,spring-data-jdbc,Java,Spring Data Jdbc,我有一个具有一对一关系的聚合,在第二个级别中,子实体具有一对多关系(列表)。当前,当实体被保存时,它执行预期的操作,并且正在保存它。但是,当我试图从数据库中获取实体时,生成的SQL是错误的,导致了错误。我真的说不出我在这里错过了什么,任何帮助都将不胜感激。 Im使用Lombok、spring数据jdbc和spring引导。也许龙目山有事情要做,但我说不出来。 下面是我所说的示例代码: 接口 公共接口ChargeRepository扩展了Crudepository{ } 实体 @数据 @AllA

我有一个具有一对一关系的聚合,在第二个级别中,子实体具有一对多关系(列表)。当前,当实体被保存时,它执行预期的操作,并且正在保存它。但是,当我试图从数据库中获取实体时,生成的SQL是错误的,导致了错误。我真的说不出我在这里错过了什么,任何帮助都将不胜感激。 Im使用Lombok、spring数据jdbc和spring引导。也许龙目山有事情要做,但我说不出来。 下面是我所说的示例代码: 接口

公共接口ChargeRepository扩展了Crudepository{
}
实体

@数据
@AllArgsConstructor
@诺尔格构装师
@JsonIgnoreProperties(ignoreUnknown=true)
公共课收费{
@身份证
私人长id;
私有数据;
非公开摘要;
}
这是DDL

CREATE TABLE CHARGE(
  ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  SOME_DATA DOUBLE(2) NOT NULL,
  PRIMARY KEY(ID)
);

CREATE TABLE SUMMARY(
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
OTHER_DATA DOUBLE(2) NOT NULL,
CHARGE BIGINT UNSIGNED NOT NULL,
PRIMARY KEY(ID)
);

CREATE TABLE Multiplier(
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
DETAIL_DATA DOUBLE(2) NOT NULL,
SUMMARY BIGINT UNSIGNED NOT NULL,
SUMMARY_KEY INTEGER NOT NULL,
PRIMARY KEY(ID)
);
问题是,当我保存一个新实体时,它可以正常工作,但当我尝试从数据库中获取它时,生成的sql会在表之间建立一个联接,该联接具有一个列“details”,该列存在于实体中,但显然不是表的一部分。这就是我得到的错误

PreparedStatementCallback;错误的SQL语法[选择charge.id作为id,charge.some_数据作为some_数据,summary.id作为summary_id,summary.other_数据作为summary_other_数据,summary.details作为summary_details来自charge LEFT外部连接summary作为summary上的summary.charge=charge.id,其中charge.id=?];嵌套异常为org.h2.jdbc.JdbcSQLException:Column\'SUMMARY.DETAILS\'notfound\n Column\'SUMMARY.DETAILS\'notfound;SQL语句:\n选择charge.id作为id,charge.some_数据作为some_数据,summary.id作为summary_id,summary.other_数据作为summary_其他_数据,summary.details作为summary_详细信息从charge左侧外部连接summary作为summary ON summary.charge=charge.id,其中charge.id=

我错过了什么?
编辑:忘记添加了,如果列表在根聚合中,它可以正常工作。

我想知道为什么您没有使用@OneToMany和@JoinColumn注释来定义关系
@OneToMany(cascade=CascadeType.ALL,orphanRemoving=true)@JoinColumn(name=“summary”)私有集乘数=newhashset()一般来说,我对java有点陌生,所以我可能错了,但是spring data jdbc不是JPA实现,这就是为什么我没有使用它,这个库中不存在注释这似乎是一个bug。你能把一个问题提交到吗?一个可执行的测试用例附加到它或Github repo中会很棒。我一有时间就会做,Jens,谢谢!
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Multiplier {

    @Id
    private Long id;

    private Double detailData;
}
CREATE TABLE CHARGE(
  ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  SOME_DATA DOUBLE(2) NOT NULL,
  PRIMARY KEY(ID)
);

CREATE TABLE SUMMARY(
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
OTHER_DATA DOUBLE(2) NOT NULL,
CHARGE BIGINT UNSIGNED NOT NULL,
PRIMARY KEY(ID)
);

CREATE TABLE Multiplier(
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
DETAIL_DATA DOUBLE(2) NOT NULL,
SUMMARY BIGINT UNSIGNED NOT NULL,
SUMMARY_KEY INTEGER NOT NULL,
PRIMARY KEY(ID)
);