小编abs*_*hit的帖子

Spring Data / Hibernate 使用 Postgres 保存实体,在冲突更新某些字段时使用插入

我在 Spring 中有一个域对象,我使用 JpaRepository.save 方法保存它并使用 Postgres 的序列生成器自动生成 id。

@SequenceGenerator(initialValue = 1, name = "device_metric_gen", sequenceName = "device_metric_seq")
public class DeviceMetric extends BaseTimeModel {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "device_metric_gen")
    @Column(nullable = false, updatable = false)
    private Long id;
///// extra fields
Run Code Online (Sandbox Code Playgroud)

我的用例需要做一个upsert而不是正常的save操作(我知道如果 id 存在就会更新)。如果存在三列的组合(假设复合唯一),我想更新现有行,否则创建新行。这与类似:

INSERT INTO customers (name, email)
VALUES
   (
      'Microsoft',
      'hotline@microsoft.com'
   ) 
ON CONFLICT (name) 
DO
      UPDATE
     SET email = EXCLUDED.email || ';' || customers.email;
Run Code Online (Sandbox Code Playgroud)

我能想到的在 Spring-data 中实现相同的一种方法是:

  1. 在服务层编写自定义保存操作
  2. 是否获取三列以及是否存在一行
  3. 在当前对象中设置相同的 …

postgresql spring spring-data-jpa spring-boot

8
推荐指数
1
解决办法
2721
查看次数

如何将一对多/一对一映射到 Spring Data R2DBC 中的 POJO

我正在尝试在新的反应式数据 r2dbc 中复制我在 Spring Data JPA 中使用的一些功能。我知道 r2dbc 不是一个成熟的 ORM,但想了解在 r2dbc 中复制以下场景的最佳方法是什么:

public class Doctor extends BaseModel {

    //other fields and id

    @NotNull
    @Enumerated(EnumType.STRING)
    @ElementCollection(fetch = FetchType.LAZY, targetClass = Language.class)
    @CollectionTable(name = "doctor_language",
        joinColumns = @JoinColumn(name = "doctor_id"))
    @Column(name = "language")
    private List<Language> languages = new ArrayList<>();


    @OneToMany(fetch = FetchType.LAZY, targetEntity = DoctorHealthProvider.class, mappedBy = 
        "doctor")
    private List<DoctorHealthProvider> providers = new ArrayList<>();

    // other fields
}
Run Code Online (Sandbox Code Playgroud)

如果我使用 Spring Data JPA,对 DoctorRepository(它扩展 JpaRepository)的一个简单的 findById 调用会给我一个doctor对象,其中包含表中的语言doctor_language列表和表中的健康提供者列表health_provider

我正在阅读有关预测的内容,但似乎无法找出在 …

java spring spring-webflux spring-data-r2dbc r2dbc

6
推荐指数
1
解决办法
1276
查看次数

在Spring Webflux中执行阻止JDBC调用

我正在使用Spring Webflux和Spring Data jpa,并使用PostgreSql作为后端数据库。我不想在进行诸如find和的数据库调用时阻塞主线程save。为了达到同样的目的,我在Controller类和jdbcScheduler服务类中都有一个主调度程序。

我定义它们的方式是:

@Configuration
@EnableJpaAuditing
public class CommonConfig {

    @Value("${spring.datasource.hikari.maximum-pool-size}")
    int connectionPoolSize;

    @Bean
    public Scheduler scheduler() {
        return Schedulers.parallel();
    }

    @Bean
    public Scheduler jdbcScheduler() {
        return Schedulers.fromExecutor(Executors.newFixedThreadPool(connectionPoolSize));
    }

    @Bean
    public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) {
        return new TransactionTemplate(transactionManager);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在服务层中进行获取/保存调用时,我做了:

    @Override
    public Mono<Config> getConfigByKey(String key) {
        return Mono.defer(
            () -> Mono.justOrEmpty(configRepository.findByKey(key)))
            .subscribeOn(jdbcScheduler)
            .publishOn(scheduler);
    }

    @Override
    public Flux<Config> getAllConfigsAfterAppVersion(int appVersion) {
        return Flux
            .fromIterable(configRepository.findAllByMinAppVersionIsGreaterThanEqual(appVersion))
            .subscribeOn(jdbcScheduler)
            .publishOn(scheduler);
    }

    @Override
    public Flux<Config> addConfigs(List<Config> …
Run Code Online (Sandbox Code Playgroud)

java spring-boot project-reactor spring-webflux

5
推荐指数
1
解决办法
1290
查看次数

调用 JavaPairRDD.max 时 Spark 中的任务不可序列化异常

在 ItelliJ 上运行此程序时,我遇到一些异常,例如:Exception in thread "main" org.apache.spark.SparkException: Task not serialized Code Snippet :

`

public class MostPopularSuperHero {

public static void main(String args[]) {
    SparkConf conf = new SparkConf().setAppName("MostPopularSuperHero").setMaster("local[*]");
    JavaSparkContext sc = new JavaSparkContext(conf);

    class HrDict {
        Map<Integer, String> getHeroDict() {
            Map<Integer, String> heroDict = new HashMap<>();
            BufferedReader br = null;

            try {

                String sCurrentLine;

                br = new BufferedReader(new FileReader("/Users/11130/udemy/SparkCourse/Marvel-Names.txt"));

                while ((sCurrentLine = br.readLine()) != null) {
                    String str = sCurrentLine;
                    String[] fields = str.split(" ", 2);
                    heroDict.put(Integer.parseInt(fields[0]), fields[1]); …
Run Code Online (Sandbox Code Playgroud)

java serialization apache-spark

4
推荐指数
1
解决办法
3850
查看次数

如何在JavaPairRDD上使用max方法

所以,我试图使用max in JavaPairRDD但无法使其工作.

JavaPairRDD<Integer, String> someRdd = (initialisation)

String maxValue = someRdd.max()  //not working
Run Code Online (Sandbox Code Playgroud)

我的代码:http://ideone.com/0YXCJw

java apache-spark

0
推荐指数
1
解决办法
1133
查看次数