【问题标题】:Hibernate: Find entity from one to many tableHibernate:从一个到多个表中查找实体
【发布时间】:2023-03-16 08:53:01
【问题描述】:

我有两张桌子

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
}

正如你所见,我的英雄职业没有提到英雄品质,我想保持这种风格。

我也有一个仓库

@Repository
public interface HeroicQualityDAO
        extends PagingAndSortingRepository<HeroicQuality, Long>
{
    Optional<HeroicQuality> findByName(String name);

    List<HeroicQuality> findByOrderByIdDesc();
}

我想做的是有一个方法,比如

Optional<HeroicQuality> findByHeroName(String heroName)

这样,如果从英雄表中给出一个英雄的名字,我将能够获得英雄品质的对象。

我怎样才能做出这样的方法? 有没有什么方法可以在没有在英雄对象中引用它的情况下获得英雄品质的对象? 我该怎么做呢?

【问题讨论】:

    标签: spring hibernate h2


    【解决方案1】:

    将以下方法添加到HeroicQualityDAO

       Optional<HeroicQuality> findByHeroesName(String heroName);
    

    如果你对方法名不满意,你可以这样做

        @Query("Select h from HeroicQuality hq join hq.heros h where h.name = :name")
        Optional<HeroicQuality> findByHeroName(String name);
    

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 2017-07-31
      • 2013-09-04
      • 1970-01-01
      • 2015-08-13
      • 2012-03-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多