我在 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 中实现相同的一种方法是:
我正在尝试在新的反应式数据 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
我正在阅读有关预测的内容,但似乎无法找出在 …
我正在使用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) 在 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) 所以,我试图使用max in JavaPairRDD但无法使其工作.
JavaPairRDD<Integer, String> someRdd = (initialisation)
String maxValue = someRdd.max() //not working
Run Code Online (Sandbox Code Playgroud)
我的代码:http://ideone.com/0YXCJw