【问题标题】:Can i get data from multiple tables without jointables or foreign keys at them我可以从多个表中获取数据而没有可连接或外键吗
【发布时间】:2019-05-28 11:51:21
【问题描述】:

我正在尝试从两个数据库表中获取单个数据。这些表没有外键,也没有可连接的。我正在使用 spring-data 来检索第一个数据集所需的数据。

我有两个具有公共字符串值的数据集,并且想要从两个表中检索数据而不使用可连接或外键,从第一个数据集中检索数据。

我正在使用简单的 DataRepository 接口

import org.springframework.data.jpa.repository.JpaRepository;

public interface DataRepository extends JpaRepository<FirstData, Long> {

    DataService getById(Long id);

}

FirstData 实体:

@Data
@Entity
@Table(schema = "someschema", name = "firstdata")
public class FirstData {

    @Id
    @Column(name = "id")
    private Long uuid;

    @Column(name = "name")
    private String name;

    @Column(name = "type")
    private String type;

}   

SecondData 实体:

@Data
@Entity
@Table(schema = "someschema", name = "seconddata")
public class SecondData {

    @Id
    @Column(name = "id")
    private Long uuid;

    @Column(name = "type")
    private String type;

    @Column(name = "value")
    private String value;

}   

和数据服务

@Service
public class DataService {

    private DataRepository dataRepository;

    public DataService(DataRepository dataRepository){
        this.dataRepository = dataRepository;
    }

    public void getBothFirstAndSecondData() {

        List<FirstData> firstDataSet = dataRepository.findAll();
    }
}

我需要从两个表中获取数据,但不想修改表结构、使可连接或添加外键。另外,我不想在第二个数据集周围添加另一个存储库编写代码。我只需要在第一个数据集结果中从第二个数据集中获得一个“值”。解决此类数据检索的最简单方法是什么?

【问题讨论】:

  • 创建两个单独的实体和单独的存储库。从服务中的两个repo中获取数据,并编写与它们之间的公共字符串匹配的逻辑。
  • 您发布了两个同名课程 - DictService。您引用了一个没有代码的类FirstData。你的问题目前没有意义。
  • 是的,抱歉,只是打错了类名。我设法找到了简单的解决方案:在 FirstData 和 SecondData 之间创建了一个单向的 @OneToOne 关系。它对我有用。

标签: java spring-data jointable


【解决方案1】:

sql查询上面的问题可以是:

select value from seconddata where id IN (select id from firstdata)

【讨论】:

  • 是的,我也期待自定义查询@Query,但我无法检索 List,因为它没有“值”属性。你能指出一些使用 spring-jpa 检索所需数据集的代码(链接)吗?
猜你喜欢
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2017-08-11
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
相关资源
最近更新 更多