【发布时间】:2020-07-14 13:59:46
【问题描述】:
我有两张桌子
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
}
请注意,我不想在我的 Hero 对象中引用 HeroicQuality。
我也有一个仓库
@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 的数据。
我不知道为什么会这样......
【问题讨论】:
标签: database spring-boot hibernate h2