Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Database Hibernate一对多存储库找不到较旧的条目_Database_Spring Boot_Hibernate_H2 - Fatal编程技术网

Database Hibernate一对多存储库找不到较旧的条目

Database Hibernate一对多存储库找不到较旧的条目,database,spring-boot,hibernate,h2,Database,Spring Boot,Hibernate,H2,我有两张桌子 CREATE TABLE `heroic_quality` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(515) NOT NULL UNIQUE, PRIMARY KEY (`id`) ); CREATE TABLE `hero` ( `id` INT NOT NULL AUTO_INCREMENT, `name`

我有两张桌子

CREATE TABLE `heroic_quality`
(
    `id`   INT          NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(515) NOT NULL UNIQUE,
    PRIMARY KEY (`id`)
);

CREATE TABLE `hero`
(
    `id`         INT            NOT NULL AUTO_INCREMENT,
    `name`       VARCHAR(515)   NOT NULL UNIQUE,
    `quality_id` INT            DEFAULT NULL,
    FOREIGN KEY  (`quality_id`) REFERENCES heroic_quality (id),
    PRIMARY KEY  (`id`)
);
hibernate中的对象是

@Table(name = "heroic_quality")
@Entity(name = "heroic_quality")
public class HeroicQuality
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    protected long id;

    @Column(name = "name", nullable = false, unique = true)
    private String name;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "id")
    @Fetch(FetchMode.SELECT)
    private List<Hero> heroes;

    //ommited getters and setters for shortness
}


@Table(name = "hero")
@Entity(name = "hero")
public class Hero
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    protected long id;

    @Column(name = "name", nullable = false, unique = true)
    private String name;

    //ommited getters and setters for shortness
}
我只会得到圣女贞德的数据。
我不知道为什么会发生这种情况……

因为JPA没有从您的实体模型生成数据库模式,所以无法生成正确的查询

如果查看生成的查询:

select heroicqual0_.id as id1_2_, heroicqual0_.name as name2_2_ from heroic_quality heroicqual0_ left outer join hero heroes1_ on heroicqual0_.id=heroes1_.id where heroes1_.name=?
HeroQual0_u0.id=heroes1_u0.id此部分导致问题。两个表中id列上唯一具有相同值的记录是4个“上帝幻象”和4个“圣女贞德”

连接应该是这样的:herome\u quality.id=hero.quality\u id

您可以编写查询以获得所需的输出:

@Repository
public interface HeroicQualityDAO extends PagingAndSortingRepository<HeroicQuality, Long>
{
    @Query(value="select * from heroic_quality q join hero h on q.id=h.quality_id where h.name=:name", nativeQuery = true)
    Optional<HeroicQuality> findByHeroesName(@Param("name") String heroName);
}
select heroicqual0_.id as id1_2_, heroicqual0_.name as name2_2_ from heroic_quality heroicqual0_ left outer join hero heroes1_ on heroicqual0_.id=heroes1_.id where heroes1_.name=?
@Repository
public interface HeroicQualityDAO extends PagingAndSortingRepository<HeroicQuality, Long>
{
    @Query(value="select * from heroic_quality q join hero h on q.id=h.quality_id where h.name=:name", nativeQuery = true)
    Optional<HeroicQuality> findByHeroesName(@Param("name") String heroName);
}