【发布时间】: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)
这样,如果从英雄表中给出一个英雄的名字,我将能够获得英雄品质的对象。
我怎样才能做出这样的方法? 有没有什么方法可以在没有在英雄对象中引用它的情况下获得英雄品质的对象? 我该怎么做呢?
【问题讨论】: