மபிம் எனும்

பழமையான தரவு வகைகளை எவ்வாறு வரைபடமாக்குவது என்பதை நாங்கள் ஏற்கனவே கண்டுபிடித்துள்ளோம்: @Column சிறுகுறிப்பு மற்றும் @Type சிறுகுறிப்பு ஆகியவற்றைப் பயன்படுத்துகிறோம் . ஆனால் எல்லா நிகழ்வுகளையும் இந்த சிறுகுறிப்புகளால் மறைக்க முடியாது. மற்றும் மிகவும் பொதுவான வழக்கு enum ஆகும் .

Java enum பொருட்களை தரவுத்தளத்தில் இரண்டு வழிகளில் சேமிக்கலாம்:

  • ஒரு எண்ணாக
  • ஒரு சரமாக

ஒரு சிறிய உதாரணத்தை எழுதுவோம், அங்கு பயனருக்கு பிடித்த வண்ணம் இருக்கும், இது enum ஐப் பயன்படுத்தி அமைக்கப்பட்டுள்ளது.


enum Color {
   RED,
   ORANGE,
   YELLOW,
   GREEN,
   BLUE,
   VIOLET
}

பயனர் வகுப்பில் வண்ணப் புலத்தைச் சேர்க்கவும் :


@Entity
@Table(name="user")
class User
{
   @Column(name="id")
   public Integer id;
 
   @Column(name="favorite_color")
   public Color favoriteColor;
 
   @Column(name="created_date")
   public Date createdDate;
}

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


@Enumerated(EnumType.ORDINAL)

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


@Enumerated(EnumType.STRING)

உதாரணமாக:


@Entity
@Table(name="user")
class User
{
   @Column(name="id")
   public Integer id;
 
   @Enumerated(EnumType.ORDINAL) //value will be saved to the base as a number
   @Column(name="favorite_color")
   public Color favoriteColor;
 
   @Column(name="created_date")
   public Date createdDate;
}

மாபிம் பூலியன்

இரண்டாவது பயனுள்ள காட்சி பூலியன் வகை மேப்பிங் ஆகும். SQL க்கு பூலியனுக்கு அதன் சொந்த தரவு வகை இல்லை, அதற்கு பதிலாக எதுவும் அங்கு பயன்படுத்தப்பட்டது என்பது வரலாற்று ரீதியாக நடந்தது.

மிகவும் பொதுவான மூன்று விருப்பங்கள்:

  • 1 அல்லது 0
  • 'எஃப்' அல்லது 'டி'
  • 'Y' அல்லது 'N'

பொதுவாக, நீங்கள் உங்கள் தளத்தை வடிவமைக்கப் போகிறீர்கள் என்றால், உடனே BIT வகையை எழுதுவது நல்லது. சரி, அதற்கான முழு மேப்பிங் இப்படி இருக்கும்:


	@Column(name = "is_correct", columnDefinition = "BIT")
	@Type(type = "org.hibernate.type.NumericBooleanType")
    private Boolean isCorrect;

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

கணக்கிடப்பட்ட புலங்கள்

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

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

உதாரணமாக:


@Entity(name = "Square")
public class Square {
           	@Id
           	public Long id;
 
           	public Integer width;
 
           	public Integer height;
 
           	@Transient
           	public Integer total;
}

இது ஒரு நல்ல வழி, ஆனால் தரவுத்தளத்திலிருந்து ஒரு பொருளைப் படிக்கும்போது, ​​மொத்த புலம் பூஜ்யமாக இருக்கும். மேலும் அதில் அகலம்* உயரம் என்ற தயாரிப்பு இருக்க வேண்டும் என விரும்புகிறோம். இதை ஹைபர்னேட்டிலும் செய்யலாம். இதற்கு ஒரு சிறப்பு @Formula சிறுகுறிப்பு உள்ளது .


@Entity(name = "Square")
public class Square {
           	@Id
           	public Long id;
 
           	public Integer width;
 
           	public Integer height;
 
           	@Formula(value = " width * height ")
          	public Integer total;
}

அத்தகைய புலம் தரவுத்தளத்தில் சேமிக்கப்படாது, மேலும் தரவுத்தளத்திலிருந்து பொருளைப் படிக்கும்போது, ​​சூத்திரத்தால் கணக்கிடப்பட்ட மதிப்பு அதில் எழுதப்படும்.

SQL வினவல் இப்படி இருக்கும்:

 SELECT id, width, height, (width* height) AS total FROM Square;

@பதிக்கப்பட்ட

மற்றொரு பயனுள்ள சிறுகுறிப்பு @Embedded . குழந்தை பொருளின் புலங்களை நிறுவன வகுப்பின் புலங்களாகக் கருத இது உங்களை அனுமதிக்கிறது.

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


@Entity
@Table(name="user")
class User
{
   @Column(name="id")
    public Integer id;
 
   @Column(name="user_address_country")
   public String country;
   @Column(name="user_address_city")
   public String city;
   @Column(name="user_address_street")
   public String street;
   @Column(name="user_address_home")
   public String home;
 
   @Column(name="created_date")
    public Date createdDate;
}

எல்லாம் நன்றாக இருப்பதாகத் தெரிகிறது, ஆனால் ஜாவாவின் பார்வையில், முகவரியை ஒரு தனி வகுப்பில் வைப்பது தர்க்கரீதியானதாக இருக்கும். முகவரி இன்னும் ஒரு தனி நிறுவனமாக உள்ளது. ஆனால் இந்த தகவல்கள் அனைத்தும் பயனர் அட்டவணையில் உள்ள தரவுத்தளத்தில் சேமிக்கப்பட்டால் இதை எப்படி செய்வது?

@Embedded சிறுகுறிப்பு எங்களுக்கு உதவும் . முதலில், நாங்கள் பயனர் முகவரி வகுப்பை உருவாக்கி , பயனரின் முகவரியில் உள்ள அனைத்து தகவல்களையும் அதில் வைப்போம்:


@Embeddable
class UserAddress
{
   @Column(name="user_address_country")
   public String country;
   @Column(name="user_address_city")
   public String city;
   @Column(name="user_address_street")
   public String street;
   @Column(name="user_address_home")
   public String home;
}

பின்னர் எங்கள் பயனர் வகுப்பில் இந்த வகுப்பின் புலத்தைப் பயன்படுத்துகிறோம் :


@Entity
@Table(name="user")
class User
{
   @Column(name="id")
   public Integer id;
 
   @Embedded
   public UserAddress address;
 
   @Column(name="created_date")
   public Date createdDate;
}

@Embedded சிறுகுறிப்புக்கு நன்றி, பொருளைச் சேமிக்கும் போது, ​​பயனர் முகவரி வகுப்பின் புலங்கள் பயனர் வகுப்பின் புலங்களாகக் கருதப்பட வேண்டும் என்பதை Hibernate புரிந்து கொள்ளும் .

முக்கியமான! உங்கள் பயனர் வகுப்பில் இரண்டு UserAddress புலங்களைச் சேர்க்க முடிவு செய்தால் , @Embeddedஐப் பயன்படுத்துவது இனி வேலை செய்யாது: உங்களிடம் நகல் புலங்கள் இருக்கும், அவற்றை எப்படியாவது பிரிக்க வேண்டும். சிறுகுறிப்புகளை மேலெழுதுவதன் மூலம் இது செய்யப்படுகிறது: @AttributeOverrides சிறுகுறிப்பைப் பயன்படுத்தி .

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