জেপিএ ব্যবহার করে একটি মানচিত্র <স্ট্রিং, স্ট্রিং> সংরক্ষণ করা


103

আমি ভাবছি attributesযে নীচের ক্লাসে জেপিএ 2 ব্যবহার করে টীকাগুলি ব্যবহার করা সম্ভব কিনা?

public class Example {
    long id;
    // ....
    Map<String, String> attributes = new HashMap<String, String>();
    // ....
}

যেহেতু আমাদের ইতিমধ্যে একটি বিদ্যমান বিদ্যমান ডাটাবেস রয়েছে, তাই আদর্শভাবে নিম্নলিখিত মানগুলির মানটি attributes নিম্নলিখিত বিদ্যমান সারণিতে মানচিত্র করতে পারে:

create table example_attributes {
    example_id bigint,
    name varchar(100),
    value varchar(100));

উত্তর:


201

জেপিএ 2.0 প্রজ্ঞাপনগুলির মাধ্যমে আদিমগুলির সংগ্রহকে সমর্থন করে @ElementCollectionযা আপনি java.util.Mapসংগ্রহগুলির সমর্থনটির সাথে একত্রে ব্যবহার করতে পারেন । এর মতো কিছু কাজ করা উচিত:

@Entity
public class Example {
    @Id long id;
    // ....
    @ElementCollection
    @MapKeyColumn(name="name")
    @Column(name="value")
    @CollectionTable(name="example_attributes", joinColumns=@JoinColumn(name="example_id"))
    Map<String, String> attributes = new HashMap<String, String>(); // maps from attribute name to value

}

আরও দেখুন (জেপিএ ২.০ স্পেসিফিকেশনে)

  • ২.6 - এম্বেডেবল ক্লাস এবং বেসিক প্রকারের সংগ্রহ
  • ২.7 মানচিত্র সংগ্রহ
  • 10.1.11 - উপাদান সংগ্রহের টিকা
  • 11.1.29 মানচিত্রের কলাম কলাম টিকা

1
জেপিএ 1 ব্যবহার করে এটি করার কি কোনও কর্মসীমা আছে? আমি কেবল এর সাথে উদাহরণগুলি পেয়েছিMap<String, SomeOtherClass>
এল। হল্যান্ডা

3
উল্লেখ করার মতো এটির example_attributesএকটি যৌগিক কী থাকা উচিত (example_id, name)- যা উপরের থেকে hbm2ddl উত্পন্ন করবে।
জেমস বাসেট

আমি উপরের উদাহরণ দিয়ে চেষ্টা করেছি, কিন্তু যখন কোনও সত্তা অবিচল থাকার চেষ্টা করার সময় আমি একটি ব্যতিক্রম পাচ্ছি: আপনাকে অবশ্যই এই টেবিলের জন্য কমপক্ষে একটি ম্যাপিং সংজ্ঞায়িত করতে হবে। প্রশ্ন: InsertObjectQuery (নাল)। কোন ইঙ্গিত? আমি একটি খালি সত্তা তৈরি করি এবং বৈশিষ্ট্যের মানচিত্র সেট করি, তারপরে জেদ করার চেষ্টা করছি।
কামিলা

2
মারিয়াডিবি ব্যবহার করে, আমি এটি করতে দৌড়ে এসেছি Specified key was too long; max key length is 767 bytes। এটি যে প্রাথমিক কীটি তৈরির চেষ্টা করে তা হ'ল ভারচর (255) এবং @ জয়নক্লামমের সংমিশ্রণ যা ডিফল্ট কলামের আকারের চেয়ে বেশি। একটি দৈর্ঘ্য সরবরাহ করতে আপনাকে হয় আপনার ডাটাবেস পরিবর্তন করতে হবে বা আপনার @ ম্যাপকি কলম পরিবর্তন করতে হবে:@MapKeyColumn(name="name", length=100)
জন

18
  @ElementCollection(fetch = FetchType.LAZY)
  @CollectionTable(name = "raw_events_custom", joinColumns = @JoinColumn(name =     "raw_event_id"))
  @MapKeyColumn(name = "field_key", length = 50)
  @Column(name = "field_val", length = 100)
  @BatchSize(size = 20)
  private Map<String, String> customValues = new HashMap<String, String>();

এটি কীভাবে কলাম এবং সারণীর নাম এবং ক্ষেত্রের দৈর্ঘ্যের উপর নিয়ন্ত্রণ সহ একটি মানচিত্র সেটআপ করতে পারে তার একটি উদাহরণ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.