6.1 सर्व्हरवर फाइल्स साठवा

कधीकधी बायनरी ऑब्जेक्ट्स डेटाबेसमध्ये सेव्ह करणे आवश्यक असते. उदाहरणार्थ, फाइल्स. जर फाईल मोठी असेल तर ती डिस्कवरील वेगळ्या फोल्डरमध्ये संग्रहित करणे आणि डेटाबेसमध्ये त्याचे मार्ग संग्रहित करणे सर्वात वाजवी आहे. उदाहरण:

c:\db-files\users\12355\avatar.jpg

आणि डेटाबेसमध्ये आम्ही फाइलसाठी फक्त एक सापेक्ष मार्ग संग्रहित करतो:

\12355\avatar.jpg

डेटाबेसमध्ये सापेक्ष पथ संचयित करणे सोयीस्कर आहे, कारण त्यातून URL मिळवणे सोपे आहे:

https://storage.codegym.cc/users/12355/avatar.jpg

आम्ही फक्त सर्व्हरच्या नावाचा सापेक्ष मार्ग पेस्ट करतो आणि आम्ही पूर्ण केले.

6.2 प्रतिमा थेट डेटाबेसमध्ये संग्रहित करा

तथापि, जर चित्रे लहान असतील, तर ती थेट डेटाबेसमध्ये संग्रहित केली जाऊ शकतात आणि क्लायंटला बाइट्सचा संच म्हणून दिली जाऊ शकतात. अशा प्रकरणांसाठी, SQL मध्ये एक विशेष BLOB डेटा प्रकार आहे - बायनरी लार्ज ऑब्जेक्ट. किंवा त्याऐवजी, त्यापैकी दोन देखील आहेत:

  • CLOB - वर्ण मोठा ऑब्जेक्ट,
  • BLOB - बायनरी लार्ज ऑब्जेक्ट.

CLOB चा वापर खूप मोठा ग्रंथ संग्रहित करण्यासाठी केला जातो. BLOB बायनरी डेटा साठवण्यासाठी आहे, जसे की लहान चित्रे, व्हिडिओ आणि इतर.

उदाहरण:

@Entity
@Table(name="user")
public class User {

    @Id
    private String id;

	@Column(name = "name", columnDefinition="VARCHAR(128)")
    private String name;

	@Lob
	@Column(name = "photo", columnDefinition="BLOB")
    private byte[] photo;

	// ...
}

भाष्य @Lobहायबरनेटला सांगते की फील्डमध्ये एक मोठा ऑब्जेक्ट संग्रहित केला जातो . आणि columnDefinition="BLOB"हे सर्व डेटाबेसमध्ये कसे जतन करावे याबद्दल आधीच बोलतो.

चला एक उदाहरण कोड लिहू जो नवीन वापरकर्ता आणि त्याचा फोटो डेटाबेसमध्ये सेव्ह करतो:

byte[] imageBuffer = Files.readAllBytes(Paths.get("C:/temp/avatar.png"))

User user = new User();
user.setId("1");
user.setName("Zapp");
user.setPhoto(imageBuffer);

session.persist(user);

6.3 XML आणि JSON

हायबरनेट ला डेटा प्रकार म्हणून JSON साठी मनोरंजक समर्थन आहे. हे तुम्हाला एकल JSON ऑब्जेक्ट म्हणून स्ट्रिंगचा हॅशमॅप संचयित करण्यास अनुमती देते. DBMS JSON सह कार्य करू शकत असल्यास, ते असे दिसते:

@JdbcTypeCode(SqlTypes.JSON)
private Map<String, String> properties;

हायबरनेट काळजी घेते की टाइप ऑब्जेक्ट Map<String, String>एकाच JSON ऑब्जेक्टमध्ये अनुक्रमित केला जाईल. तसेच, डेटाबेसमधून ऑब्जेक्ट वाचताना, ते JSON ऑब्जेक्टचे संच बनवते Map<String, String>.

हायबरनेट XML सह असे काहीतरी करू शकते:

@JdbcTypeCode(SqlTypes.SQLXML)
private Map<String, String> properties;