தொகுப்புகளின் பட்டியல்

சரி, எளிய வகைகளை எவ்வாறு வரைபடமாக்குவது என்பதை நீங்கள் பார்த்திருக்கிறீர்கள். இப்போது இன்னும் சுவாரஸ்யமான கேள்விகளுக்குச் செல்ல வேண்டிய நேரம் இது - பொருட்களின் சேகரிப்புகளை எவ்வாறு வரைபடமாக்குவது.

நாம் பொருட்களை 5 குழுக்களாக வைத்திருக்கலாம்:

  • வரிசை - பொருள்களின் வரிசை
  • பட்டியல் - பொருட்களின் பட்டியல்
  • தொகுப்பு - பொருள்களின் தொகுப்பு
  • வரைபடம் - பொருள்களின் அகராதி
  • சேகரிப்பு - பொருள்களின் தொகுப்பு

சேகரிப்பு புலத்துடன் கூடிய வகுப்பின் எடுத்துக்காட்டு:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @magical-annotation
   public List messages;
}

ஒரு புலத்தை அல்ல, பல மதிப்புகளை சேமிக்க அனுமதிக்கும் இந்த மந்திர சிறுகுறிப்பு என்ன?

இந்த சிறுகுறிப்பு @ElementCollection என்று அழைக்கப்படுகிறது . உதாரணமாக:

@Entity
@Table(name="user")
class User  {
   @Id
   @Column(name="id")
   public Integer id;

   @ElementCollection
   public List<String> messages;
}

இது மிகவும் எளிமையாக எழுதப்பட்டுள்ளது, ஆனால் அது அற்பமானதாக இல்லை.

துணை அட்டவணை

பல கூறுகளைக் கொண்ட மற்றும் @ElementCollection சிறுகுறிப்புடன் குறிக்கப்பட்ட நிறுவன வகுப்பின் அனைத்து புலங்களும் ஒரு சிறப்பு துணை அட்டவணையில் தரவுத்தளத்தில் உள்ளன. உண்மையில், இது தர்க்கரீதியானது.

இந்த அட்டவணை இரண்டு வடிவங்களில் தரவைக் கொண்டிருக்கலாம்:

  • வரிசைப்படுத்தப்பட்ட (பட்டியல், வரைபடம்) மூன்று நெடுவரிசைகளைக் கொண்டுள்ளது:
    • முக்கிய நெடுவரிசை (வெளிநாட்டு விசை) - மூலப்பொருளின் ஐடிக்கான குறிப்பு.
    • குறியீட்டு நெடுவரிசை - சேகரிப்பில் உள்ள நிலை/குறியீடு.
    • உறுப்பு நெடுவரிசை - மதிப்பு.
  • வரிசைப்படுத்தப்படாத (தொகுப்பு) இரண்டு நெடுவரிசைகளைக் கொண்டுள்ளது:
    • முக்கிய நெடுவரிசை (வெளிநாட்டு விசை) - மூலப்பொருளின் ஐடிக்கான குறிப்பு.
    • உறுப்பு நெடுவரிசை - மதிப்பு.

ஒரு சிறுகுறிப்பைப் பயன்படுத்தி இந்த அட்டவணையின் பெயரை நீங்கள் வெளிப்படையாக அமைக்கலாம்:

@CollectionTable(name="table_name")

உதாரணமாக:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @ElementCollection
   @CollectionTable(name="user_message")
   public List<String> messages;
}

முக்கியமான! @CollectionTable சிறுகுறிப்பு குறிப்பிடப்படவில்லை என்றால் , ஹைபர்னேட் வகுப்பின் பெயர் மற்றும் புலத்தின் பெயர்: பயனர் வகுப்பு மற்றும் புலத்தின் அடிப்படையில் அட்டவணைப் பெயரை உருவாக்கும்.செய்திகள்அட்டவணைக்கு "User_messages" என்று பெயரிடவும்.

சேகரிப்பு சேகரிப்பு

ஆனால் துணை அட்டவணையை உருவாக்குவதை ஹைபர்னேட்டிற்கு விட்டுவிட்டு அதை நாமே உருவாக்குவோம். முதலில் நாம் இரண்டு நெடுவரிசைகளுடன் ஒரு அட்டவணையை உருவாக்க வேண்டும்:

CREATE TABLE user_message {
    user_id INT,
    message VARCHAR(255)
};

இந்த அட்டவணைக்கு அதன் சொந்த ஐடி-நெடுவரிசை இல்லை என்பதை நினைவில் கொள்ளவும். இது துணை அட்டவணைகளின் முக்கிய அம்சமாகும். மற்ற வகை துணை அட்டவணைகளை சிறிது நேரம் கழித்து நீங்கள் அறிந்து கொள்வீர்கள்.

இப்போது இந்த அட்டவணையை நமது புலத்திற்கு வரைபடமாக்க வேண்டும்செய்திகள்பயனர் வகுப்பில் . இது இப்படி இருக்கும்:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @ElementCollection
   @CollectionTable(name="user_message", joinColumns = @JoinColumn(name = "user_id"))
   @Column(name = "message")
   public Set<String> messages;
}

இங்கே இரண்டு விஷயங்களில் கவனம் செலுத்துவது மதிப்பு.

முதலில், @Column(name = "message") சிறுகுறிப்புடன் குறிப்பிடப்பட்ட செய்தி நெடுவரிசை , user_message துணை அட்டவணையில் உள்ளது, பயனர் அட்டவணையில் இல்லை.

இரண்டாவதாக, @JoinColumn(name = "user_id") சிறுகுறிப்பில் , பயனர்_ஐடி நெடுவரிசையின் பெயரைக் குறிப்பிட்டுள்ளோம், இது பயனர் அட்டவணையின் ஐடியைக் குறிக்கிறது. ஹைபர்னேட்டுக்கு அவற்றை எவ்வாறு சரியாக இணைப்பது என்பது தெரியும்.

சேகரிப்பு

நீங்கள் ஒரு பட்டியல் அல்லது வரிசையின் வரிசைப்படுத்தப்பட்ட கூறுகளை துணை அட்டவணையில் சேமிக்க விரும்பினால், உங்களுக்கு மூன்று நெடுவரிசைகள் கொண்ட அட்டவணை தேவை:

CREATE TABLE user_message {
    user_id INT,
    index INT,
    message VARCHAR(255)
};

"இண்டெக்ஸ்" என்ற நெடுவரிசைப் பெயர் உங்களுக்குப் பிடிக்கவில்லை என்றால், அல்லது அதை மாற்ற முடியாவிட்டால், மேப்பிங்கின் போது வேறு பெயரைக் குறிப்பிடலாம். இதைச் செய்ய, நீங்கள் @Index சிறுகுறிப்பைப் பயன்படுத்த வேண்டும் .

உதாரணமாக:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @ElementCollection
   @CollectionTable(name="user_message",
       	indexes = { @Index(columnList = "list_index") }
       	joinColumns = @JoinColumn(name = "user_id"))
   @Column(name = "message")
   public List<String> messages;
}

வரைபட சேகரிப்பு

இறுதியாக, நீங்கள் ஒரு தொகுப்பை மட்டுமல்ல, ஒரு ஹாஷ்மேப்பையும் சேமிக்க விரும்புகிறீர்கள், அதற்கான துணை அட்டவணையில் உங்களுக்கு இரண்டு நெடுவரிசைகள் தேவை:

CREATE TABLE user_message {
    user_id INT,
    key VARCHAR(255),
    message VARCHAR(255)
};

வரைபடத்திற்கான விசையைக் குறிப்பிட, உங்களுக்கு @MapKeyColumn சிறுகுறிப்பு தேவை .

உதாரணமாக:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @ElementCollection
   @CollectionTable(name="user_message", joinColumns = @JoinColumn(name = "user_id"))
   @MapKeyColumn(name = "key")
   @Column(name = "message")
   public Map<String, String> messages;
}

உத்தியோகபூர்வ ஆவணத்தில் நீங்கள் கூடுதல் தகவல்களைக் காணலாம் .