質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

0回答

1981閲覧

【SpringBoot】複合キーを自動採番したい

JsoHaya

総合スコア17

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2021/04/24 15:57

編集2021/04/24 16:07

SpringBootの複合キーを用いて自動採番をしたいです。

String型のListをリクエストとして受け取り、1つのIDで、sequenceを割り振りテーブルに格納したいです。
sequenceは毎回1からスタートであるため、自動採番せずfor文の中でセットしていますが、
idは一回のfor文の間は同じ値をセットしたいと考えています。
・複合キーの場合@GeneratedValue(strategy=GenerationType.IDENTITY)を利用して自動採番する方法
・上記不可能の場合、テーブルで保持しているidの一番最後の部分を取得する方法はあるのか?
を教えていただきたいです。よろしくお願いいたします。

▫️テーブルは以下のようなイメージです。idとsequenceが主キー。

idsequencename
11"aaa"
12"bbb"
13"ccc"
21"ddd"
22"eee"
23"fff"

▫️永続化処理です

java

1List<Activeword> activewordList = new ArrayList<Activeword>(); 2 3// リクエストのリスト(String)をループでオブジェクト作成しリストに追加する 4for (int i = 0; i < request.getActivewords().size(); i++) { 5 Activeword activeword = new Activeword(); 6 activeword.setActivewordSequence(i + 1); 7 activeword.setActivewordName(request.getActivewords().get(i)); 8 activewordList.add(activeword); 9} 10// リクエストが["aaa", "bbb", "ccc"]の場合 11// id: 1, sequence: 1, name: "aaa" 12// id: 1, sequence: 2, name: "bbb" 13// id: 1, sequence: 3, name: "ccc" 14// をテーブルに格納したい。 15activewordRepository.saveAll(activewordList); // 永続化処理

▫️テーブルのモデル

java

1@Entity 2@Table(name = "activeword") 3@IdClass(ActivewordPK.class) 4public class Activeword { 5 6 @Id 7 @GeneratedValue(strategy=GenerationType.IDENTITY) 8 private Integer activewordId; 9 @Id 10 private Integer activewordSequence; 11 private String activewordName; 12}

▫️Primary key用のクラス(qiitaからパクったがseializableがなぜ必要なのかわかっていません)

java

1public class ActivewordPK implements Serializable { 2 private static final long serialVersionUID = 1L; 3 4 private Integer activewordId; private Integer activewordSequence; 5} 6

▫️リクエストのモデルクラス

java

1public class ActivewordRequest { 2 3 private List<String> activewords; 4 5 public List<String> getActivewords() { 6 return activewords; 7 } 8 9 public void setActivewords(List<String> activewords) { 10 this.activewords = activewords; 11 } 12}

▫️リポジトリ

java

1@Repository 2public interface ActivewordRepository extends JpaRepository<Activeword, ActivewordPK>{ 3}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問