হাইবারনেট ওআরএম সহ ক্লাউড স্প্যানার

1. ওভারভিউ

হাইবারনেট জাভা প্রকল্পের জন্য ডি ফ্যাক্টো স্ট্যান্ডার্ড ORM সমাধান হয়ে উঠেছে। এটি সমস্ত প্রধান রিলেশনাল ডেটাবেসকে সমর্থন করে এবং স্প্রিং ডেটা JPA- এর মতো আরও শক্তিশালী ORM টুলকে সক্ষম করে৷ এছাড়াও, অনেক হাইবারনেট-সামঞ্জস্যপূর্ণ ফ্রেমওয়ার্ক রয়েছে যেমন স্প্রিং বুট, মাইক্রোপ্রোফাইল এবং কোয়ার্কাস।

হাইবারনেট ওআরএম-এর জন্য ক্লাউড স্প্যানার ডায়ালেক্ট ক্লাউড স্প্যানারের সাথে হাইবারনেট ব্যবহার করা সম্ভব করে তোলে। আপনি ক্লাউড স্প্যানার-এর সুবিধা পাবেন - স্কেলেবিলিটি এবং রিলেশনাল সিমেন্টিকস - হাইবারনেটের ইডিওম্যাটিক অধ্যবসায়ের সাথে। এটি আপনাকে বিদ্যমান অ্যাপ্লিকেশনগুলিকে ক্লাউডে স্থানান্তরিত করতে বা হাইবারনেট-ভিত্তিক প্রযুক্তির দ্বারা প্রদত্ত বিকাশকারীর উত্পাদনশীলতা বৃদ্ধি করে নতুনগুলি লিখতে সহায়তা করতে পারে৷

আপনি কি শিখবেন

  • ক্লাউড স্প্যানারের সাথে সংযোগকারী একটি সাধারণ হাইবারনেট অ্যাপ্লিকেশন কীভাবে লিখবেন
  • কিভাবে একটি ক্লাউড স্প্যানার ডাটাবেস তৈরি করবেন
  • হাইবারনেট ওআরএম-এর জন্য ক্লাউড স্প্যানার ডায়ালেক্ট কীভাবে ব্যবহার করবেন
  • হাইবারনেটের সাথে ক্রিয়েট-রিড-আপডেট-ডিলিট (সিআরইউডি) অপারেশনগুলি কীভাবে বাস্তবায়ন করবেন

আপনি কি প্রয়োজন হবে

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ (যদি আপনার ইতিমধ্যেই একটি Gmail বা G Suite অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

k6ai2NRmxIjV5iMFlVgA_ZyAWE4fhRrkrZZ5mZuCas81YLgk0iwIyvgoDet4s2lMYGC5K3xLSOjIbmC9kjiezvQuxuhdYRolbv1rft1lOmA_PZ915mZuCas8

UtcCMcSYtCOrEWuILx3XBwb3GILPqXDd6cJiQQxmylg8GNftqlnE7u8aJLhlr1ZLRkpncKdj8ERnqcH71wab2HlfUnO9CgXKd0-CAQC2t3xd4wd4wd0d0

KoK3nfWQ73s_x4QI69xqzqdDR4tUuNmrv4FC9Yq8vtK5IVm49h_8h6x9X281hAcJcOFDtX7g2BXPvP5O7SOR2V4UI6W8gN6cTJCVAdtqdt-w8gN6cTJCVAdtqdtX8W8gN6cTJCVAdtwqdw8_8 QCXA6w

প্রজেক্ট আইডিটি মনে রাখবেন, সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটি পরে এই কোডল্যাবে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে৷

এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। "ক্লিনিং আপ" বিভাগে যে কোনও নির্দেশাবলী অনুসরণ করতে ভুলবেন না যা আপনাকে কীভাবে সংস্থানগুলি বন্ধ করতে হবে তা পরামর্শ দেয় যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন৷ Google ক্লাউডের নতুন ব্যবহারকারীরা $300USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন R47NpBm6yyzso5vnxnRBikeDAXxl3LsM6tip3rJxnKuS2EZdCI0h-eIOGm9aECq8JXbMFlJkd68uTutXU8gGmQUVa5iI1OdZczXP2tzqWMTQWDR04CWZ47 QA .

STsYbcAtkIQyN6nL9BJhld3Fv5KxedYynpUVcRWwvIR-sYMMc4kfK-unIYgtsD4P6T0P8z-A12388tPmAh-Trsx80qobaW4KQXHJ7qJbJhdw7qJiwdwyx_wyr6 XMciw

আপনি যদি আগে কখনও ক্লাউড শেল শুরু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রীন (ভাঁজের নীচে) উপস্থাপন করা হবে যা বর্ণনা করে। যদি এটি হয়, তবে চালিয়ে যান ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এককালীন স্ক্রীনটি দেখতে কেমন তা এখানে রয়েছে:

LnGMTn1ObgwWFtWpjSdzlA9TDvSbcY76GiLQLc_f7RP1QBK1Tl4H6kLCHzsi89Lkc-serOpqNH-F2XKmV5AnBqTbPon4HvCwSSrY_ERFlXmXeQr-5RFX5

ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷

hfu9bVHmrWw01Hnrlf4MBNja6yvssDnZzN9oupcG12PU88Vvo30tTluX9IySwnu5_TG3U2UXAasX9eCwqwZtc6Yhwxri95zG82DLUcKxrFYaqOjtvnHVZANKVD0V

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, শুধুমাত্র একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকরণ করেছেন এবং প্রকল্পটি ইতিমধ্যে আপনার প্রকল্প আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

3. একটি ডাটাবেস তৈরি করুন

ক্লাউড শেল চালু হওয়ার পরে, আপনি আপনার GCP প্রকল্পের সাথে ইন্টারঅ্যাক্ট করতে gcloud ব্যবহার শুরু করতে পারেন।

প্রথমে, Cloud Spanner API সক্ষম করুন।

gcloud services enable spanner.googleapis.com

এখন, codelab-instance নামে একটি ক্লাউড স্প্যানার ইনস্ট্যান্স তৈরি করা যাক।

gcloud spanner instances create codelab-instance \
 --config=regional-us-central1 \
 --description="Codelab Instance" --nodes=1

এখন, আমাদের এই উদাহরণে একটি ডাটাবেস যোগ করতে হবে। আমরা এটিকে codelab-db বলব।

gcloud spanner databases create codelab-db --instance=codelab-instance

4. একটি খালি অ্যাপ তৈরি করুন

আমরা একটি সাধারণ জাভা কনসোল অ্যাপ্লিকেশন তৈরি করতে মাভেন কুইকস্টার্ট আর্কিটাইপ ব্যবহার করব।

mvn archetype:generate \
 -DgroupId=codelab \
 -DartifactId=spanner-hibernate-codelab \
 -DarchetypeArtifactId=maven-archetype-quickstart \
 -DarchetypeVersion=1.4 \
 -DinteractiveMode=false

অ্যাপ ডিরেক্টরিতে পরিবর্তন করুন।

cd spanner-hibernate-codelab

Maven ব্যবহার করে অ্যাপ কম্পাইল করুন এবং রান করুন।

mvn compile exec:java -Dexec.mainClass=codelab.App

আপনি Hello World! কনসোলে মুদ্রিত।

5. নির্ভরতা যোগ করুন

আসুন ক্লাউড শেল এডিটর খোলার মাধ্যমে এবং spanner-hibernate-codelab ডিরেক্টরির ভিতরে ব্রাউজ করে সোর্স কোডটি অন্বেষণ করি।

b5cb37d043d4d2b0.png

এখন পর্যন্ত, আমাদের কাছে শুধু একটি বেসিক জাভা কনসোল অ্যাপ আছে যা "Hello World!" প্রিন্ট করে। . যাইহোক, আমরা সত্যিই একটি জাভা অ্যাপ্লিকেশন লিখতে চাই যা ক্লাউড স্প্যানারের সাথে কথা বলার জন্য হাইবারনেট ব্যবহার করে। এর জন্য, আমাদের হাইবারনেটের জন্য ক্লাউড স্প্যানার ডায়ালেক্ট, ক্লাউড স্প্যানার JDBC ড্রাইভার এবং হাইবারনেট কোরের প্রয়োজন হবে। সুতরাং, pom.xml ফাইলের ভিতরে <dependencies> ব্লকে নিম্নলিখিত নির্ভরতা যোগ করা যাক।

pom.xml

    <!-- Spanner Dialect -->
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-hibernate-dialect</artifactId>
      <version>1.5.0</version>
    </dependency>

    <!-- JDBC Driver -->
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-jdbc</artifactId>
      <version>2.0.0</version>
    </dependency>

    <!-- Hibernate -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.4.29.Final</version>
    </dependency>

6. হাইবারনেট ORM কনফিগার করুন

এর পরে, আমরা হাইবারনেট কনফিগারেশন ফাইল hibernate.cfg.xml এবং hibernate.properties তৈরি করব। খালি ফাইলগুলি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান এবং তারপরে ক্লাউড শেল এডিটর ব্যবহার করে সেগুলি সম্পাদনা করুন।

mkdir src/main/resources \
 && touch src/main/resources/hibernate.cfg.xml \
 && touch src/main/resources/hibernate.properties

সুতরাং, আসুন হাইবারনেটকে টীকাযুক্ত সত্তা ক্লাস সম্পর্কে বলি আমরা hibernate.cfg.xml পূরণ করে ডাটাবেসে ম্যাপিং করব। (আমরা পরে সত্তা ক্লাস তৈরি করব।)

src/main/resources/hibernate.cfg.xml

<hibernate-configuration>
  <session-factory>
    <!-- Annotated entity classes -->
    <mapping class="codelab.Album"/>
    <mapping class="codelab.Singer"/>
  </session-factory>
</hibernate-configuration>

হাইবারনেটকে ক্লাউড স্প্যানার ইনস্ট্যান্সের সাথে কীভাবে সংযোগ করতে হবে এবং কোন উপভাষাটি ব্যবহার করতে হবে তাও জানতে হবে। সুতরাং, আমরা এসকিউএল সিনট্যাক্স, স্প্যানার জেডিবিসি ড্রাইভার, এবং ডাটাবেস স্থানাঙ্কের সাথে জেডিবিসি সংযোগ স্ট্রিংয়ের জন্য SpannerDialect ব্যবহার করতে বলব। এটি hibernate.properties ফাইলে যায়।

src/main/resources/hibernate.properties

hibernate.dialect=com.google.cloud.spanner.hibernate.SpannerDialect
hibernate.connection.driver_class=com.google.cloud.spanner.jdbc.JdbcDriver
hibernate.connection.url=jdbc:cloudspanner:/projects/{PROJECT_ID}/instances/codelab-instance/databases/codelab-db
# auto-create or update DB schema
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true

আপনার প্রজেক্ট আইডি দিয়ে {PROJECT_ID} প্রতিস্থাপন করতে ভুলবেন না, যা আপনি নিম্নলিখিত কমান্ড চালানোর মাধ্যমে পেতে পারেন:

gcloud config get-value project

যেহেতু আমাদের কোনো বিদ্যমান ডাটাবেস স্কিমা নেই, তাই আমরা প্রথমবার অ্যাপটি চালানোর সময় হাইবারনেটকে ক্লাউড স্প্যানারে দুটি টেবিল তৈরি করতে দিতে hibernate.hbm2ddl.auto=update প্রপার্টি যোগ করেছি।

সাধারণত, আপনি নিশ্চিত করবেন যে GOOGLE_APPLICATION_CREDENTIALS পরিবেশ ভেরিয়েবলে একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল ব্যবহার করে অথবা gcloud auth application-default login কমান্ড ব্যবহার করে কনফিগার করা অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রগুলি ব্যবহার করে প্রমাণীকরণ শংসাপত্রগুলি সেট আপ করা হয়েছে৷ যাইহোক, যেহেতু আমরা ক্লাউড শেলে চলছি, ডিফল্ট প্রকল্পের শংসাপত্রগুলি ইতিমধ্যেই সেট আপ করা হয়েছে।

7. টীকাযুক্ত সত্তা ক্লাস তৈরি করুন

এখন আমরা কিছু কোড লিখতে প্রস্তুত।

আমরা দুটি সাধারণ পুরানো জাভা অবজেক্ট (POJOs) সংজ্ঞায়িত করব যা ক্লাউড স্প্যানার- Singer এবং Album টেবিলে ম্যাপ করবে। Album Singer সাথে @ManyToOne সম্পর্ক থাকবে। আমরা @OneToMany টীকা দিয়ে Singer তাদের Album তালিকায় ম্যাপ করতে পারতাম, কিন্তু এই উদাহরণের জন্য, ডাটাবেস থেকে একজন গায়ককে আনার জন্য আমরা আসলেই সব অ্যালবাম লোড করতে চাই না।

Singer এবং Album সত্তা ক্লাস যোগ করুন।

ক্লাস ফাইল তৈরি করুন।

touch src/main/java/codelab/Singer.java \
&& touch src/main/java/codelab/Album.java

ফাইলের বিষয়বস্তু পেস্ট করুন।

src/main/java/codelab/Singer.java

package codelab;

import java.util.Date;
import java.util.UUID;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Type;

@Entity
public class Singer {

  @Id
  @GeneratedValue
  @Type(type = "uuid-char")
  private UUID singerId;

  private String firstName;

  private String lastName;

  @Temporal(TemporalType.DATE)
  private Date birthDate;

  public Singer() {
  }

  public Singer(String firstName, String lastName, Date birthDate) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.birthDate = birthDate;
  }

  public UUID getSingerId() {
    return singerId;
  }

  public void setSingerId(UUID singerId) {
    this.singerId = singerId;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public Date getBirthDate() {
    return birthDate;
  }

  public void setBirthDate(Date birthDate) {
    this.birthDate = birthDate;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (!(o instanceof Singer)) {
      return false;
    }

    Singer singer = (Singer) o;

    if (!firstName.equals(singer.firstName)) {
      return false;
    }
    if (!lastName.equals(singer.lastName)) {
      return false;
    }
    return birthDate.equals(singer.birthDate);
  }

  @Override
  public int hashCode() {
    int result = firstName.hashCode();
    result = 31 * result + lastName.hashCode();
    result = 31 * result + birthDate.hashCode();
    return result;
  }
}

src/main/java/codelab/Album.java

package codelab;

import java.util.UUID;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Type;

@Entity
public class Album {

  @Id
  @GeneratedValue
  @Type(type = "uuid-char")
  UUID albumId;

  @ManyToOne
  Singer singer;

  String albumTitle;

  public Album() {
  }

  public Album(Singer singer, String albumTitle) {
    this.singer = singer;
    this.albumTitle = albumTitle;
  }

  public UUID getAlbumId() {
    return albumId;
  }

  public void setAlbumId(UUID albumId) {
    this.albumId = albumId;
  }

  public Singer getSinger() {
    return singer;
  }

  public void setSinger(Singer singer) {
    this.singer = singer;
  }

  public String getAlbumTitle() {
    return albumTitle;
  }

  public void setAlbumTitle(String albumTitle) {
    this.albumTitle = albumTitle;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (!(o instanceof Album)) {
      return false;
    }

    Album album = (Album) o;

    if (!singer.equals(album.singer)) {
      return false;
    }
    return albumTitle.equals(album.albumTitle);
  }

  @Override
  public int hashCode() {
    int result = singer.hashCode();
    result = 31 * result + albumTitle.hashCode();
    return result;
  }
}

লক্ষ্য করুন যে এই উদাহরণের জন্য আমরা প্রাথমিক কী-এর জন্য একটি স্বয়ংক্রিয়-উৎপন্ন UUID ব্যবহার করছি। এটি ক্লাউড স্প্যানারে একটি পছন্দের আইডি টাইপ, কারণ এটি হটস্পটগুলি এড়িয়ে যায় কারণ সিস্টেমটি সার্ভারগুলির মধ্যে কী রেঞ্জ দ্বারা ডেটা ভাগ করে৷ একটি একঘেয়ে ক্রমবর্ধমান পূর্ণসংখ্যা কীও কাজ করবে, তবে কম কার্যকারিতা হতে পারে।

8. সত্তা সংরক্ষণ করুন এবং অনুসন্ধান করুন

সবকিছু কনফিগার করা এবং সত্তা অবজেক্ট সংজ্ঞায়িত করে, আমরা ডাটাবেসে লেখা শুরু করতে পারি এবং এটি অনুসন্ধান করতে পারি। আমরা একটি হাইবারনেট Session খুলব, এবং তারপর এটিকে প্রথমে clearData() পদ্ধতিতে সমস্ত টেবিল সারি মুছে ফেলতে ব্যবহার করব, writeData() পদ্ধতিতে কিছু সত্তা সংরক্ষণ করব এবং readData() (HQL) হাইবারনেট কোয়েরি ভাষা ব্যবহার করে কিছু প্রশ্ন চালাব। readData() পদ্ধতি।

App.java এর বিষয়বস্তুগুলিকে নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:

src/main/java/codelab/App.java

package codelab;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

public class App {

  public final static DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");

  public static void main(String[] args) {
    // create a Hibernate sessionFactory and session
    StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
    SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata()
        .buildSessionFactory();
    Session session = sessionFactory.openSession();

    clearData(session);

    writeData(session);

    readData(session);

    // close Hibernate session and sessionFactory
    session.close();
    sessionFactory.close();
  }

  private static void clearData(Session session) {
    session.beginTransaction();

    session.createQuery("delete from Album where 1=1").executeUpdate();
    session.createQuery("delete from Singer where 1=1").executeUpdate();

    session.getTransaction().commit();
  }

  private static void writeData(Session session) {
    session.beginTransaction();

    Singer singerMelissa = new Singer("Melissa", "Garcia", makeDate("1981-03-19"));
    Album albumGoGoGo = new Album(singerMelissa, "Go, Go, Go");
    session.save(singerMelissa);
    session.save(albumGoGoGo);

    session.save(new Singer("Russell", "Morales", makeDate("1978-12-02")));
    session.save(new Singer("Jacqueline", "Long", makeDate("1990-07-29")));
    session.save(new Singer("Dylan", "Shaw", makeDate("1998-05-02")));

    session.getTransaction().commit();
  }

  private static void readData(Session session) {
    List<Singer> singers = session.createQuery("from Singer where birthDate >= '1990-01-01' order by lastName")
        .list();
    List<Album> albums = session.createQuery("from Album").list();

    System.out.println("Singers who were born in 1990 or later:");
    for (Singer singer : singers) {
      System.out.println(singer.getFirstName() + " " + singer.getLastName() + " born on "
          + DATE_FORMAT.format(singer.getBirthDate()));
    }

    System.out.println("Albums: ");
    for (Album album : albums) {
      System.out
          .println("\"" + album.getAlbumTitle() + "\" by " + album.getSinger().getFirstName() + " "
              + album.getSinger().getLastName());
    }
  }

  private static Date makeDate(String dateString) {
    try {
      return DATE_FORMAT.parse(dateString);
    } catch (ParseException e) {
      e.printStackTrace();
      return null;
    }
  }
}

এখন, কোড কম্পাইল করে রান করা যাক। আমরা ডেমন থ্রেড পরিষ্কার করার বিষয়ে সতর্কতা দমন করতে -Dexec.cleanupDaemonThreads=false বিকল্পটি যোগ করব যা Maven করার চেষ্টা করবে।

mvn compile exec:java -Dexec.mainClass=codelab.App -Dexec.cleanupDaemonThreads=false

আউটপুটে আপনি এই মত কিছু দেখতে হবে:

Singers who were born in 1990 or later:
Jacqueline Long born on 1990-07-29
Dylan Shaw born on 1998-05-02
Albums: 
"Go, Go, Go" by Melissa Garcia

এই মুহুর্তে, আপনি যদি ক্লাউড স্প্যানার কনসোলে যান এবং ডাটাবেসে সিঙ্গার এবং অ্যালবাম টেবিলের ডেটা দেখেন, আপনি এইরকম কিছু দেখতে পাবেন:

f18276ea54cc266f.png

952d9450dd659e75.png

9. পরিষ্কার করুন

ক্লাউড স্প্যানার ইন্সট্যান্সটি মুছে ফেলি যা আমরা শুরুতে তৈরি করেছি তা নিশ্চিত করতে যে এটি অপ্রয়োজনীয়ভাবে সংস্থানগুলি ব্যবহার করছে না।

gcloud spanner instances delete codelab-instance

10. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে একটি জাভা অ্যাপ্লিকেশন তৈরি করেছেন যা ক্লাউড স্প্যানারে ডেটা বজায় রাখতে হাইবারনেট ব্যবহার করে।

  • আপনি একটি ক্লাউড স্প্যানার উদাহরণ এবং একটি ডাটাবেস তৈরি করেছেন৷
  • আপনি হাইবারনেট ব্যবহার করার জন্য অ্যাপ্লিকেশনটি কনফিগার করেছেন৷
  • আপনি দুটি সত্তা তৈরি করেছেন: শিল্পী এবং অ্যালবাম৷
  • আপনি আপনার অ্যাপ্লিকেশনের জন্য স্বয়ংক্রিয়ভাবে ডাটাবেস স্কিমা তৈরি করেছেন
  • আপনি সফলভাবে ক্লাউড স্প্যানারে সত্তাগুলি সংরক্ষণ করেছেন এবং তাদের জিজ্ঞাসা করেছেন৷

আপনি এখন ক্লাউড স্প্যানার দিয়ে হাইবারনেট অ্যাপ্লিকেশন লিখতে প্রয়োজনীয় মূল পদক্ষেপগুলি জানেন৷

এরপর কি?