సేకరణల జాబితా

సరే, సాధారణ రకాలను ఎలా మ్యాప్ చేయాలో మీరు చూసారు. ఇప్పుడు మరిన్ని ఆసక్తికరమైన ప్రశ్నలకు వెళ్లడానికి సమయం ఆసన్నమైంది - వస్తువుల సేకరణలను ఎలా మ్యాప్ చేయాలి.

మరియు మేము 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 ఉల్లేఖనంతో గుర్తించబడిన ఎంటిటీ తరగతిలోని అన్ని ఫీల్డ్‌లు ప్రత్యేక సహాయక పట్టికలోని డేటాబేస్‌లో ఉంటాయి. ఏది, నిజానికి, తార్కికం.

ఈ పట్టిక రెండు రూపాల్లో డేటాను కలిగి ఉంటుంది:

  • ఆర్డర్ చేయబడినవి (జాబితా, మ్యాప్) మూడు నిలువు వరుసలను కలిగి ఉంటాయి:
    • కీ కాలమ్ (విదేశీ కీ) - మాతృ వస్తువు యొక్క IDకి సూచన.
    • సూచిక కాలమ్ - సేకరణలో స్థానం/సూచిక.
    • మూలకం కాలమ్ - విలువ.
  • క్రమం చేయని (సెట్) రెండు నిలువు వరుసలను కలిగి ఉంది:
    • కీ కాలమ్ (విదేశీ కీ) - మాతృ వస్తువు యొక్క IDకి సూచన.
    • మూలకం కాలమ్ - విలువ.

మీరు ఉల్లేఖనాన్ని ఉపయోగించి ఈ పట్టిక పేరును స్పష్టంగా సెట్ చేయవచ్చు:

@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)
};

ఈ పట్టికకు దాని స్వంత id-కాలమ్ లేదని గమనించండి. ఇది సహాయక పట్టికల యొక్క ప్రధాన లక్షణం. మీరు కొంచెం తరువాత ఇతర రకాల సహాయక పట్టికలతో పరిచయం పొందుతారు.

ఇప్పుడు మనం ఈ పట్టికను మన ఫీల్డ్‌కు మ్యాప్ చేయాలిసందేశాలువినియోగదారు తరగతిలో . ఇది ఇలా కనిపిస్తుంది:

@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") ఉల్లేఖనంలో , మేము user_id నిలువు వరుస పేరును పేర్కొన్నాము, ఇది వినియోగదారు పట్టిక యొక్క 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;
}

మ్యాప్ సేకరణ

చివరకు, మీరు కేవలం సేకరణను మాత్రమే కాకుండా, HashMapని నిల్వ చేయాలనుకుంటున్నారు మరియు దాని కోసం మీకు సహాయక పట్టికలో రెండు నిలువు వరుసలు అవసరం:

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;
}

మీరు అధికారిక డాక్యుమెంటేషన్‌లో మరింత సమాచారాన్ని కనుగొనవచ్చు .