У меня есть две таблицы
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
}
Обратите внимание, что я не хочу иметь ссылку на HeroicQuality в моем объекте Hero.
У меня также есть репозиторий
@Repository
public interface HeroicQualityDAO
extends PagingAndSortingRepository<HeroicQuality, Long>
{
Optional<HeroicQuality> findByHeroesName(String heroName);
}
Моя база данных содержит следующие данные.
Данные в моей базе данных
Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я вызываю findByHeroesName
, если параметр Joan of Arc
, то isPresent()
возвращает true. Однако, если параметр равен Queen Boudica
или Barbos
, то isPresent()
ложно, и я не могу получить качественный объект.
Почему это происходит и как это исправить?
Код, который я выполняю каждый раз, -
Optional<HeroicQuality> foundquality = qualities.findByHeroesName(hero.getName());
if (foundquality.isPresent())
{
log.info(foundquality.get().toString());
}
else
{
log.info("Quality not found");
}
И я получу данные только для Joan of Arc
. Я не понимаю, почему это происходит ...