私はCassandraに触れ始めていますが、私はJOINできないので困っています。 JOINはそのままCQLで行うことができないので、私は代替手段を探してJavaアプリケーション側に参加しようと考えました。私はrepository.save(mydata)できませんSpring + CassandraでJOINのかなりの代替案を探しています
具体的には、@ OneToManyを使用してエンティティを結合しようとしましたが、次のエラーが表示されます。
良い解決策はありますか?
■プロジェクト構造
SpringBoot +春データのApache Cassandraの
バージョンについて:
- 春ブーツ::(v1.3.5.RELEASE)
- 春-データcassandra- 1.3.5.Release
- cassandra 2.1.16
■エラーログ
com.datastax.driver.core.exceptions.InvalidQueryException: Unknown identifier emp
at com.datastax.driver.core.Responses$Error.asException(Responses.java:102) ~[cassandra-driver-core-2.1.9.jar:na]
at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:149) ~[cassandra-driver-core-2.1.9.jar:na]
at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:183) ~[cassandra-driver-core-2.1.9.jar:na]
at com.datastax.driver.core.RequestHandler.access$2300(RequestHandler.java:44) ~[cassandra-driver-core-2.1.9.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:751) ~[cassandra-driver-core-2.1.9.jar:na]
■ソース:コントローラ
@RequestMapping(value = "/DepartmentsCassandra/form", method = RequestMethod.POST)
@Transactional(readOnly=false)
public ModelAndView form(
@RequestParam("department_id") int department_id,
@RequestParam("department_name") String department_name,
ModelAndView mav){
Departments mydata = new Departments();
mydata.setDepartment_id(department_id);
mydata.setDepartment_name(department_name);
repository.save(mydata);// ← Error occurred !!!
return new ModelAndView("redirect:/DepartmentsCassandra");
}
■ソース:エンティティ:すっごく部門
package com.example.cassandra.entity;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import org.springframework.cassandra.core.PrimaryKeyType;
import org.springframework.data.cassandra.mapping.Column;
import org.springframework.data.cassandra.mapping.PrimaryKeyColumn;
import org.springframework.data.cassandra.mapping.Table;
@Table(value="departments")
public class Departments {
@PrimaryKeyColumn(name = "department_id",ordinal = 1,type = PrimaryKeyType.PARTITIONED)
private int department_id;
@Column(value = "department_name")
private String department_name;
public Departments(int department_id,String department_name){
this.department_id = department_id;
this.department_name = department_name;
}
@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="department_id",insertable=false,updatable=false)
private List<Employees> emp = new ArrayList<Employees>();
すぐに貴重なアドバイスをいただき、ありがとうございます。私はemployee_by_departmentを作成します。 しかし、それは学習段階にあるので今はいいですが、既存のRDBMSシステムをCassandraに置き換えたい場合、すべての結合点を修正するのは非常に苦労します。 良いアイデアはありますか? –
それは苦しいでしょう。 Afaik、C *への移行のための「簡単な方法」はありません。また、テーブルの同期化(C * 3.0のマテリアライズド・ビューの検索)や、おそらく依存している「欠落した」トランザクションのような新しい課題にも対処する必要があります。 – rob
盗むには、貴重な情報をありがとうございます。いろいろ考えていることがたくさんあるようです。 。 –