У меня есть две таблицы
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`)
);
И объекты в спящем режиме:
@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
}
Как вы видите, мой класс Hero не имеет ссылки на качество heroi c и Я хотел бы сохранить его таким.
Также у меня есть репозиторий
@Repository
public interface HeroicQualityDAO
extends PagingAndSortingRepository<HeroicQuality, Long>
{
Optional<HeroicQuality> findByName(String name);
List<HeroicQuality> findByOrderByIdDesc();
}
Я бы хотел иметь такой метод, как
Optional<HeroicQuality> findByHeroName(String heroName)
Таким образом, если указать имя героя из таблицы героев, я смогу получить объект качества heroi c.
Как я могу сделать такой метод? Есть ли способ получить объект качества heroi c без ссылки на него в объекте hero? Как я могу go это сделать?