有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用本机查询更新数据库中数据的最佳方法是什么

    EntityManager em = entityManagerFactory.createEntityManager();
    String str = String.format("UPDATE service.rules SET server_id='%2$s', alert_id='%3$s', rule_expression='%4$s', rule_frequncy='%5$s' WHERE rule_id='%1$s'",Rule.getRuleId(),Rule.getServerId(),Rule.getAlertId(),Rule.getRuleExpression(),Rule.getRuleFrequency());
    Query query = em.createNativeQuery(str);
    em.getTransaction().begin();
    query.executeUpdate();
    em.getTransaction().commit();

在这里,如果rule object中的一个数据在rule_id之外为null(这是必要的),那么这个查询将失败,因此我可以为rule object中的每个值设置字符串格式,并将它们合并,排除rule object中具有null值的数据,但有没有更好的方法来做到这一点?因为如果有100个柱,那么这将不是理想的过程。那么JPA有什么可以满足我要求的吗


共 (1) 个答案

  1. # 1 楼答案

    JPA的做法是创建实体映射:

    @Entity
    public class Rule {
        @Id
        private int id;
    
        @ManyToOne
        private Server server;
    
        @OneToOne
        private Alert alert;
    
        private String ruleExpression;
    
        private double ruleFrequency;
    }
    

    spring jpa存储库:

    @Repository
    class RuleRepository extends JpaRepository<Rule, Integer> {
    }
    

    以及处理持久性的服务:

    @Service
    public class RuleService {
        @Autowired RuleRepository ruleRepository;
    
        @Transactional
        public Rule update( Rule rule ) {
            return ruleRepository.save( rule );
        }
    }
    

    然后像这样使用它:

    Rule rule = getRule();
    //change rule
    ruleService.update(rule);
    

    JPA提供商将在幕后为您生成查询,无需复杂的本地查询