0

希望大家根据实际情况玩得开心。由于我找不到我的问题的答案,所以我将此作为一个新问题提出。我目前正在开发一个可用于管理的应用程序。但是,当我进行一些实验时,我发现了一些奇怪的行为。请注意,我不会做您在生产代码中看到的一些事情。但是,我想深入了解并更好地了解我正在使用的框架。现在,让我向您展示一些代码:

1. 实体的相关部分:

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private boolean wareGroupMain;
    private String name;

    @OneToMany(mappedBy="whg",cascade= {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH})
    private Set<Medicine> whgmedicines = new HashSet<Medicine>();

    @ManyToOne(cascade= {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH})
    @JoinColumn(name="whg_id")
    private WHG mainGroup;

    @OneToMany(mappedBy="mainGroup", cascade= {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH})
    private Set<WHG> subGroups = new HashSet<WHG>();

2. 存储库的相关部分

@Repository
public interface WHGRepository extends JpaRepository<WHG,Long>{
    List<WHG> findAll();

3. 服务的相关部分

@Service
public class WHGService {

    @Autowired
    WHGRepository whgRepository;

    public List<WHG> findWHG() {

        List<WHG> allWHG = whgRepository.findAll();

        List<WHG> result = new ArrayList<WHG>();
        Stream<WHG> whgStream = allWHG.stream();

        whgStream.forEach((whg) -> {
            if (whg.isWareGroupMain()) {
                result.add(whg);
            }
        });
        whgStream.close();
        return result;
    }

    public void save(WHG whg) {
        whgRepository.save(whg);
    }

4. 组件的相关部分

private List<WHG> allwhg;
public void testIinit() {

    testInsert();
    allwhg=whgService.findWHG();    

. . . //如果我现在尝试访问 allwhg 的 whg,则所描述的问题发生在此类中的任何位置

. . .

public void testInsert() {
    WHG whg = new WHG();

    whg.setName("Med1");
    whg.setIcon(Icon.MEDKIT);
    whg.setWareGroupMain(true);

    WHG wug = new WHG();

    wug.setName("Med2");
    wug.setIcon(Icon.DRINK2);
    wug.setWareGroupMain(true);

    WHG wag = new WHG();

    wag.setName("Med3");
    wag.setIcon(Icon.CUBES);
    wag.setWareGroupMain(false);

    WHG wig = new WHG();

    wig.setName("Med4");
    wig.setIcon(Icon.BOLT);
    wig.setWareGroupMain(false);

    wag.setMainGroup(wug);
    wig.setMainGroup(wag);


    whgService.save(wig);
    whgService.save(whg);
    whgService.save(wug);
    whgService.save(wag);

. . .

如果没有足够的代码给你,请告诉我你需要什么,我会很乐意添加它。组件中发生的事情是我调用 save() 向自己插入一些测试数据,然后从数据库中“加载”它。如果我稍后现在调用 whg.getSubgroups() (我检索的对象之一)它是空的。这非常有趣,因为它 1)应该有内容,2)我想我记得 hibernate 可能会返回一个空集合但不是 null ......

那么问题来了,为什么whg.getSubgroups()在调用 save() 再调用 findAll() 时为 null?此外,如果您重复上面显示的插入方法,现在将正确检索前三个实体(我们之前遇到空问题的实体)。但是,现在新保存和获取的实体存在 null 问题。这重复直到无穷大(它仍然正确保存在数据库中)。

我希望我能把我的问题说清楚,如果没有,请告诉我。我花了很多时间来做一些可能真的微不足道的事情,但我没有得到它,而且我在互联网上找不到回答我的问题的地方。

我真的很期待您的有用回答!

最良好的祝愿, foAW

4

0 回答 0