首页 > 解决方案 > JPA/Hibernate - 对象不保存到数据库

问题描述

@Service
@Transactional
@RequiredArgsConstructor
public class HTMLParser {

    public static final String link1;
    public static final String link2;
    public final String url;

    private final @NonNull VillageRepository;
    

    public void parseLink(String link, String selektor){

        // 1. úroven - získej z hlavního odkazu všechny obce nutné k proklikání
        try {
            Document doc = Jsoup.connect(link).get();

            Elements links = doc.select(selektor);

            for (Element alink : links) {
                System.out.println("text: " + alink.text());
                parseLink(vytvořURL(alink.attr("href")), "div.sloupec3 a");
            }

           
            if(links.isEmpty()){

                links = doc.select("dl.sloupec dd");
                Village village = extractInformation(links);

                obecRepository.saveAndFlush(obec);

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
        

public void parseLink(String link, String selektor){
        
                try {
                    Document doc = Jsoup.connect(link).get();
     
                    Elements links = doc.select(selektor);
                    
                    for (Element alink : links) {
                        parseLink(createURL(alink.attr("href")), "div.sloupec3 a");
                    }
        
                    if(links.isEmpty()){
        
                        links = doc.select("h4.navigace a");
                        Set<String> hiearchie =  extractHiearchy(links);
                        Iterator<String> iterator = hiearchie.iterator();
        
                        links = doc.select("dl.sloupec dd");
                        Village village = extractInfo(links);
        
                        villageRepository.saveAndFlush(village );
        
                    }
        
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
    
        private Village extractInfo(Elements elements){
                if(elements.size() != 13){
                    elements.add(3, new Element("<dd><span class=\"sede\">--- ---</span></dd>"));
                }
                Village village = new Village(Long.parseLong(elements.get(7).text()), elements.get(0).text(), elements.get(1).text(),
                        elements.get(2).text(), elements.get(3).text(), elements.get(5).text(), elements.get(6).text(),
                        elements.get(8).text(), getHours(elements.last()));
        
                village.setEmails(extrahjZBloku(elements.get(9)));
                village.setWWW(extrahjZBloku(elements.get(10)));
                village.setPhones(extrahujTelefony(elements.get(11)));
                village.setAccounts(extrahujÚčetAIBAN(elements.get(4)));
            
                return village;
            }
    
    
        @Entity
        @Getter
        @Setter
        public class Village {
        
            public Village (){}
        
            @Id
            private long code;
        
            @Column
            private String type;
        
            @Column(name = "name")
            private String name;
        
            @Column
            private String adress;
        
            @Column(name = "sec_adress")
            private String secAdress;
        
            @Column(name = "bank")
            private String bank1;
        
            @Column(name = "bankovní_spojení2")
            private String bank2;
        
            @Column
            private String IBAN1;
        
            @Column
            private String IBAN2;
        
            @Column
            private String IC;
        
            @Column
            private String DIC;
        
            @Column
            private String shortcut;
        
            @Column
            private String email1;
        
            @Column
            private String email2;
        
            @Column
            private String email3;
        
            @Column
            private String email4;
        
            @Column
            private String www1;
        
            @Column
            private String www2;
        
            @Column
            private String www3;
        
            @Column
            private String www4;
        
            @Column
            private String telefon1;
        
            @Column
            private String telefon2;
        
            @Column
            private String telefon3;
        
            @Column
            private String telefon4;
        
            @Lob
            @Column(name = "hours")
            private String hours;
        
        
            }
    
    public interface VillageRepository extends JpaRepository<Village, Long> {
    }

我的问题是方法 parseLink 中的对象村没有保存到数据库中...什么也没有发生,甚至没有出现错误...当我尝试使用测试参数将该对象保存在 main 方法中时,它可以工作,但是不是我需要的地方...当我尝试在该方法中保存不同的东西时,什么也没有发生,所以问题一定出在方法 parseHTML 我猜谢谢您的帮助

PS:在 intelij 中,我可以看到创建的插入命令似乎没问题,但数据库中没有任何内容......

标签: javaspringhibernatejpaspring-data

解决方案


我不知道您是如何真正分配到类中的,但是您的 JpaRepository 是否用注释 @Repository 装饰?


推荐阅读