Hibernate / Spring Bootを使用してJSONファイルをJSONデータ型としてmysqlに保存する方法は?

アンキットシャルマ:

私はデータベースにjsonファイルを保存するいくつかの方法を試しましたが、エントリごとに異なる列を作成してしまいます。

「json」タイプとして1つの列に格納したい。出来ますか?

私のjsonファイル。

users.json

[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "[email protected]",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  },
...
]

これはスプリングブートアプリケーションであり、関連するコントローラーとサービスがあります。

私のドメインパッケージ。(住所と会社は埋め込み可能なクラスです)

User.java

@Data
@AllArgsConstructor @NoArgsConstructor
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String username;
    private String email;
    private String phone;
    private String website;

    @Embedded
    private Address address;

    @Embedded
    private Company company;
}

メインファイル(データベースに保存)

TypeReferenceとObjectMapperはジャクソンからのものです

@SpringBootApplication
public class JsondbApplication {
    public static void main(String[] args) {
        SpringApplication.run(JsondbApplication.class, args);
    }

    @Bean
    CommandLineRunner runner(UserService service) {
        return args -> {
            ObjectMapper mapper = new ObjectMapper();
            TypeReference<List<User>> reference = new TypeReference<List<User>>() {};
            InputStream stream = TypeReference.class.getResourceAsStream("/json/users.json");
            try {
                List<User> users = mapper.readValue(stream, reference);
                service.save(users);
                System.out.println("Saved!");
            } catch (Exception h) {
                System.out.println("Unable to save! " + h.getMessage());
            }
        };
    }

}

mysqlでは、異なる列を作成します id, name, username, ...

スプリングブーツを使っタイプで一列に収納したいですjson

笑顔:

コードはjsonをUserオブジェクトのリストに読み込み、データベースに永続化します。それをjsonとして保存するには、カスタムロジックを記述する必要があります。それを行うには複数の方法があります。

あなたは次のようなことができます

1)Userクラスに別の変数を追加するprivate String jsonData

2)@PrePersistメソッドで、シリアル化ロジックを記述します

3)@JsonInclude()ジャクソンに含める @Transient-別の列の永続化で無視する-で他の属性をマークします。id各jsonオブジェクトはデータベースの特定のIDに対して保存されるため、これらの注釈を属性に追加したくない場合があります。

したがって、新しい属性は次のようになります

@NonNull
@Column(columnDefinition = "JSON") // Only if Database has JSON type else this line can be removed
private String jsonData;

PrePersist:

@PrePersist
public void prePersist() {
    try {
        this.setJsonData(new ObjectMapper().writeValueAsString(this));
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
}

編集:メソッド@Transient属性がnullであるという問題に直面する可能性があります@PrePersistその場合は、setterメソッドを使用できます。ただし、save呼び出しの前に属性が変更されるたびに、このセッターを呼び出す必要があります。

public void setJsonData(String jsonData) {
    // Method parameter jsonData is simply ignored
    try {
        this.jsonData = new ObjectMapper().writeValueAsString(this);
    } catch (JsonProcessingException e) {
        log.error(e.getMessage());
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

spring-mvcとhibernateを使用して、ファイル自体ではなくデータベースにファイルの名前を保存する

分類Dev

Spring Bootを使用してJSONデータファイルをmongodbにインポートする方法は?

分類Dev

Spring Hibernate MVCを使用してCSVファイルをデータベースにアップロードするにはどうすればよいですか?

分類Dev

Spring BootでHibernate / JPAを使用してマルチレベルjsonを返す方法

分類Dev

Spring BootでHibernate / JPAを使用してマルチレベルjsonを返す方法

分類Dev

SpringとHibernateを使用してSFTPから大きなファイルをフェッチし、Postgresqlに保存する際の問題

分類Dev

SpringとHibernateを使用してDBからデータを取得し、jspで印刷する方法は?

分類Dev

Hibernate MySQL Maven Spring MVCを使用してデータベースからすべての行を表示する方法

分類Dev

Springを使用してHibernate Interceptor BeanにEntityManagerを注入する方法は?

分類Dev

Hibernateを使用してファイルをmysqlデータベースに保存する

分類Dev

Spring boot1.5.9とHibernateを使用して保存時に自動生成IDを取得する

分類Dev

Spring + Hibernateを使用して更新する

分類Dev

Spring Bootを使用して生成されたPDFファイルをMySQL DBに保存する方法は?

分類Dev

SpringとHibernateを使用して複数のテーブル結合からデータを取得する

分類Dev

SpringとHibernateを使用して複数のテーブル結合からデータを取得する

分類Dev

SpringとHibernateを使用して複数のデータベースに分散トランザクションを実行する「最良の」方法は何ですか

分類Dev

SpringとHibernateを使用してデータベースレベルで競合状態を実装するにはどうすればよいですか?

分類Dev

Hibernateを使用したSpring Boot:既に存在する場合はデータベースを作成し続ける

分類Dev

Spring hibernate ignore json object

分類Dev

AngularJS、Spring、Hibernateを使用して部屋の予約を保存する

分類Dev

Hibernate、Spring Boot、JavaFXを使用してJARを生成する

分類Dev

spring-bootとhibernateを使用して、stackoverflow例外を解決するにはどうすればよいですか?

分類Dev

Spring Boot + Hibernate + MySqlを使用してMVCアプリを実行する

分類Dev

Spring Boot 2 Hibernate Search

分類Dev

hibernate/spring を使用して MySQL から thymeleaf にデータをプッシュしようとしていますが、失敗します。

分類Dev

Spring Bootを使用してXLSファイルを読み取り、データベースに保存するアプリケーションを作成する方法

分類Dev

SpringでHibernate Transactionを管理しているときにHibernate Interceptorを有効にする方法は?

分類Dev

スタンドアロンアプリ(jar)でspringを使用して外部ファイルからhibernate.cfg.xmlにプロパティを含める方法

分類Dev

Spring + Hibernateを介してデータのみを読み取る

Related 関連記事

  1. 1

    spring-mvcとhibernateを使用して、ファイル自体ではなくデータベースにファイルの名前を保存する

  2. 2

    Spring Bootを使用してJSONデータファイルをmongodbにインポートする方法は?

  3. 3

    Spring Hibernate MVCを使用してCSVファイルをデータベースにアップロードするにはどうすればよいですか?

  4. 4

    Spring BootでHibernate / JPAを使用してマルチレベルjsonを返す方法

  5. 5

    Spring BootでHibernate / JPAを使用してマルチレベルjsonを返す方法

  6. 6

    SpringとHibernateを使用してSFTPから大きなファイルをフェッチし、Postgresqlに保存する際の問題

  7. 7

    SpringとHibernateを使用してDBからデータを取得し、jspで印刷する方法は?

  8. 8

    Hibernate MySQL Maven Spring MVCを使用してデータベースからすべての行を表示する方法

  9. 9

    Springを使用してHibernate Interceptor BeanにEntityManagerを注入する方法は?

  10. 10

    Hibernateを使用してファイルをmysqlデータベースに保存する

  11. 11

    Spring boot1.5.9とHibernateを使用して保存時に自動生成IDを取得する

  12. 12

    Spring + Hibernateを使用して更新する

  13. 13

    Spring Bootを使用して生成されたPDFファイルをMySQL DBに保存する方法は?

  14. 14

    SpringとHibernateを使用して複数のテーブル結合からデータを取得する

  15. 15

    SpringとHibernateを使用して複数のテーブル結合からデータを取得する

  16. 16

    SpringとHibernateを使用して複数のデータベースに分散トランザクションを実行する「最良の」方法は何ですか

  17. 17

    SpringとHibernateを使用してデータベースレベルで競合状態を実装するにはどうすればよいですか?

  18. 18

    Hibernateを使用したSpring Boot:既に存在する場合はデータベースを作成し続ける

  19. 19

    Spring hibernate ignore json object

  20. 20

    AngularJS、Spring、Hibernateを使用して部屋の予約を保存する

  21. 21

    Hibernate、Spring Boot、JavaFXを使用してJARを生成する

  22. 22

    spring-bootとhibernateを使用して、stackoverflow例外を解決するにはどうすればよいですか?

  23. 23

    Spring Boot + Hibernate + MySqlを使用してMVCアプリを実行する

  24. 24

    Spring Boot 2 Hibernate Search

  25. 25

    hibernate/spring を使用して MySQL から thymeleaf にデータをプッシュしようとしていますが、失敗します。

  26. 26

    Spring Bootを使用してXLSファイルを読み取り、データベースに保存するアプリケーションを作成する方法

  27. 27

    SpringでHibernate Transactionを管理しているときにHibernate Interceptorを有効にする方法は?

  28. 28

    スタンドアロンアプリ(jar)でspringを使用して外部ファイルからhibernate.cfg.xmlにプロパティを含める方法

  29. 29

    Spring + Hibernateを介してデータのみを読み取る

ホットタグ

アーカイブ