বড় প্রকল্পগুলির জন্য স্প্রিং ডেটা জেপিএ কীভাবে হাইবারনেট থেকে পৃথক হয়?


129

আমি কোনও নতুন প্রকল্পের জন্য হাইবারনেটের সাথে লেগে থাকি, বা জেপিএ এবং নতুন স্প্রিং ডেটা বাস্তবায়নে আমার পা ভেজাতে হবে কিনা তা সিদ্ধান্ত নিতে আমার খুব কষ্ট হচ্ছে।

স্প্রিং ডেটা ফ্রেমওয়ার্কটি কি ছোট প্রকল্পগুলির জন্য বা বিনয়ের জিজ্ঞাসার প্রয়োজনীয়তা সহ ছোট প্রকল্পগুলির জন্য উদ্দিষ্ট?

আমি অবশ্যই কোড ব্যবহারের মাধ্যমে কোড হ্রাসে সুবিধাটি দেখতে পাচ্ছি @Query টীকাটি , আপনি গতিশীল প্রশ্নের জন্য কী করবেন? আপনি যখন কোনও জটিল (সেভ) পদ্ধতি কার্যকর করতে চান তখন কী হবে?

ডকুমেন্টেশনটি কাস্টম ইন্টারফেস এবং বাস্তবায়ন করতে বলে যা আপনার মূল সংগ্রহস্থল প্রয়োগ করে, তবে আপনি যদি ক্রুড সংগ্রহস্থলটিতে কোনও সুপার পদ্ধতি অ্যাক্সেস করতে চান? ক্রড সংগ্রহস্থল কাস্টম এক প্রয়োগ করে - অন্যভাবে নয়। এটি একটি বিজোড় নকশা মত মনে হচ্ছে।

এই কাঠামোটি জটিল এবং বৃহত অ্যাপ্লিকেশনগুলির চ্যালেঞ্জগুলি পূরণ করবে কিনা তা সম্পর্কে আমি খুব অনিশ্চিত। হাইবারনেট নিয়ে আমি কখনই অনেক সমস্যায় পড়িনি, এবং আমি স্প্রিং ডেটা জেপিএর পরিবর্তে ভাল পুরাতন নির্ভরযোগ্যের সাথে লেগে থাকার কথা ভাবছি।

আমার কি করা উচিৎ? আমি স্প্রিং ডেটা জেপিএ নিয়ে গেলে অপ্রত্যাশিত জটিলতা এবং ব্যয়গুলির মুখোমুখি হব?


1
যতদূর আমি জানি, এটি সামান্য পার্থক্য করে। যাকে আপনি বেশি স্বাচ্ছন্দ্যযুক্ত তার সাথে যান। বিতর্ক কেন?
duffymo

1
আমি স্পষ্টতই হাইবারনেটের সাথে আরও আরামদায়ক, তবে যদি আমি একই জিনিসগুলি করতে পারি এবং আরও উত্পাদনশীল হতে পারি তবে আমি বরং আরও নতুন পদ্ধতির অবলম্বন করব। তবে, যদি হাইবারনেট এখনও আরও শক্তিশালী হয় এবং আমি অনেক কম সমস্যার মুখোমুখি হই, তবে এটি আমি জানতে চাই।
ইগারোয়ারি

3
জেপিএ হ'ল ওআরএমের একটি সাধারণীকরণ যা হাইবারনেটকে অনেকগুলি বাস্তবায়নের একটি হিসাবে ব্যবহার করে। আপনি একের পর এক অন্যকে কী শক্তি দান করছেন? জেপিএ একটি মান, তবে আমি দুজনের মধ্যে সামান্য পার্থক্য দেখছি। সম্পূর্ণ প্রকাশের স্বার্থে, আমি বলব যে আমি একটিরও যত্ন নিই না। উভয়ই আপনার জন্য এসকিউএল উত্পন্ন করে। আমি বরং এটি নিজে লিখতে চাই। ORM প্রতিটি সমস্যা এবং প্রতিটি ব্যবহারকারীর জন্য নয়।
duffymo

1
আমি রাজী. যখন কেবল জেপিএ বা হাইবারনেটের কথা আসে, আমি প্রতিবার হাইবারনেটটি বেছে নেব। আমি সত্যই জেপিএ বাস্তবায়নটি নিজের মতো করে পছন্দ করি না। আইডিইএতে আইডিই সমর্থনটি আসলে এক ধরণের খারাপ এখনও, এবং ইউনিট পরীক্ষা চালানোর পরিবর্তে অ্যাপ্লিকেশন শুরু হওয়ার সময় ম্যাপিংগুলি সঠিক না হলে অভিযোগ করবে। জেপিএর সাথে আমার অনেকগুলি নিতপিক রয়েছে। আমি আসলে ধরণের পুরানো হাইবারনেট এক্সএমএল ম্যাপিং ফাইলগুলি উপভোগ করি। আমার অবজেক্টগুলিকে খুব কম বিশৃঙ্খলাযুক্ত করে দেখানোর সুবিধা রয়েছে। স্প্রিং ডেটা জেপিএ অনেকগুলি নতুন বৈশিষ্ট্য সরবরাহ করে, তাই আমি অবশেষে ভাবছিলাম যে এটির স্যুইচ করা উচিত কিনা।
এরগারী

3
"স্প্রিং ডেটা" জেপিএ বা কোনও কিছুর বাস্তবায়ন নয়। এটি কেবল একটি বিদ্যমান জেপিএ বাস্তবায়ন নেয় এবং আপনি এটি সরবরাহ করে তা সরল করে। জেপিএ বাস্তবায়ন এখনও কভারের অধীনে সমস্ত কাজ করে
নীল স্টকটন

উত্তর:


104

সুতরাং, spring-dataএমন কিছু অতিরিক্ত যাদু যা জটিল প্রশ্নের সাথে সহায়তা করে। এটি প্রথমে অদ্ভুত এবং আপনি ডক্সে একেবারে এড়িয়ে যান তবে এটি সত্যই শক্তিশালী এবং দরকারী useful

Repositoryএটিতে একটি কাস্টম এবং একটি কাস্টম os RepositoryImpl 'তৈরি করা এবং স্প্রিংকে কোথায় এটি পাওয়া উচিত তা অন্তর্ভুক্ত রয়েছে। এখানে একটি উদাহরণ:

কনফিগারেশন ক্লাস - আপনার সংগ্রহস্থল প্যাকেজটির দিকে নির্দেশ করে টীকা সহ আপনার এখনও প্রয়োজনীয় xML কনফিগারেশনে নির্দেশ করুন (এটি *Implএখন স্বয়ংক্রিয়ভাবে ক্লাসগুলির জন্য দেখায় ):

@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}

jpa-repositories.xML - Springআপনার সংগ্রহস্থলগুলি কোথায় পাবেন তা বলুন । ফাইলের নাম Springসহ কাস্টম সংগ্রহস্থলগুলি অনুসন্ধান করতে বলুন CustomImpl:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

<jpa:repositories base-package="com.example.repositories" repository-impl-postfix="CustomImpl" />

</beans>

MyObjectRepository- এটি যেখানে আপনি টিকাশযুক্ত এবং অননোটিত কোয়েরি পদ্ধতিগুলি রাখতে পারেন। এই সংগ্রহস্থল ইন্টারফেসটি কীভাবে প্রসারিত করে তা নোট করুন Custom:

@Transactional
public interface MyObjectRepository extends JpaRepository<MyObject, Integer>, MyObjectRepositoryCustom {

    List<MyObject> findByName(String name);

    @Query("select * from my_object where name = ?0 or middle_name = ?0")
    List<MyObject> findByFirstNameOrMiddleName(String name);
}

MyObjectRepositoryCustom - সংগ্রহশালা পদ্ধতি যা আরও জটিল এবং সাধারণ ক্যোয়ারী বা একটি টিকা দিয়ে পরিচালনা করা যায় না:

public interface MyObjectRepositoryCustom {

    List<MyObject> findByNameWithWeirdOrdering(String name);
}

MyObjectRepositoryCustomImpl- যেখানে আপনি প্রকৃতপক্ষে কোনও স্বয়ংসম্পূর্ণ পদ্ধতি সহ বাস্তবে প্রয়োগ করেন EntityManager:

public class MyObjectRepositoryCustomImpl implements MyObjectRepositoryCustom {

    @Autowired
    private EntityManager entityManager;

    public final List<MyObject> findByNameWithWeirdOrdering(String name) {
        Query query = query(where("name").is(name));
        query.sort().on("whatever", Order.ASC);
        return entityManager.find(query, MyObject.class);
    }
}

আশ্চর্যজনকভাবে, এই সমস্ত একসাথে আসে এবং উভয় ইন্টারফেসের পদ্ধতিগুলি (এবং সিআরইউডি ইন্টারফেস, আপনি বাস্তবায়ন করেন) সমস্ত আপনি যখন করবেন তখন দেখাবে:

myObjectRepository.

তুমি দেখবে:

myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()

এটা সত্যিই কাজ করে। এবং আপনি অনুসন্ধানের জন্য একটি ইন্টারফেস পাবেন।spring-dataসত্যিই একটি বড় অ্যাপ্লিকেশন জন্য প্রস্তুত। এবং আরও প্রশ্নগুলি আপনি সাধারণ বা টীকাতে ধাক্কা দিতে পারেন আপনার চেয়ে আরও ভাল।

এই সমস্তগুলি স্প্রিং ডেটা জেপা সাইটে নথিভুক্ত করা হয় ।

শুভকামনা।


4
এটি আসলে আমি চেষ্টা করেছি এবং এটি কিছুটা কাজ করে। আমার সমস্যাটি হ'ল আপনি যদি ওভাররাইড করতে চান ()? উদাহরণস্বরূপ, কল্পনা করুন যে আপনি একটি ব্লগ সংরক্ষণ করছেন এবং আপনি সেভ () পদ্ধতিতে এর সাথে যুক্ত ট্যাগগুলি প্রক্রিয়া / সংরক্ষণ করতে চান যেহেতু এটি কোনও পরিষেবাতে রাখার অর্থটি সবচেয়ে বেশি কার্যকর হয় না। কাঁচা হাইবারনেট সহ এটি করা সহজ তবে আমি স্প্রিং জেপিএর সাথে করার কোনও ভাল উপায় দেখতে পাচ্ছি না। আমি আপনার উত্তরটিকে সঠিক হিসাবে চিহ্নিত করতে যাচ্ছি কারণ এটি সঠিক। এটিই মূলত আপনি স্প্রিং ডেটা জেপিএ দিয়ে করতে পারেন। আমি মনে করি যদিও আমি হাইবারনেটের সাথে থাকব। এই উত্তরটি অবশ্যই অন্যকে সাহায্য করবে।
ইগারোয়ারি

8
আপনি নিজের JpaRepository-> প্রয়োগ করতে পারেন MyJpaRepository। আপনাকে একটি তৈরি MyJpaRepositoryFactoryBeanকরতে হবে তবে আপনি যদি এটি সমস্ত সঠিকভাবে সেট আপ করেন তবে আপনি। সেভ () পদ্ধতিটি ওভাররাইড করতে পারেন। স্প্রিং ডেটা এখানে রয়েছে জেপিএ ডক্স: স্ট্যাটিক.স্প্রিংসোর্স.আর / স্প্রিং -ডাটা / ডেটা- জেপা / ডকস / সারেন্ট /… এখনও ছেড়ে দেবেন না!
sbzoom

@ পাইক্রোকল আপনি কীভাবে 'প্রয়োগের নিম্ন স্তরের' ব্যাখ্যা করবেন? পরিষেবা, যা ডায়োকে নিম্ন স্তরের বলে?
রুমীড

12

আমি সহজ জিজ্ঞাসা দাবির সাথে ছোট এবং বড় প্রকল্পগুলিতে স্প্রিং ডেটা জেপিএ ব্যবহার করেছি। মূল সুবিধাটি হ'ল @Queryটীকাটি ব্যবহার না করা । স্প্রিং ডেটাতে এমন কোনও কিছুই নেই যা আপনাকে এটি বড় প্রকল্পগুলিতে ব্যবহার করতে বাধা দেয় এবং সাম্প্রতিক QueryDSLসহায়তা আপনাকে সহায়তা করতে পারে। হাইবারনেটকে লক্ষ্য করে কোয়েরিডিএসএল ব্যবহার করার এটি একটি উদাহরণ

যদি আপনি জটিল প্রশ্নগুলির পূর্বে ধারণা করেন এবং আপনি জেপিএ ছাড়াই হাইবারনেট অবজেক্টগুলি ব্যবহার করতে স্বাচ্ছন্দ্য বোধ করেন তবে আমি মনে করি বিকল্প বিকল্পের সংমিশ্রণটি Repositoryআপনার প্রয়োজনীয় নির্দিষ্ট পদ্ধতিগুলির সাথে জটিল হাইবারনেট-ভিত্তিকগুলিগুলির পাশে সহজ স্প্রিং ডেটা থাকতে পারে। এটি কম জটিল হতে পারে যা একটি হাইবারনেট বাস্তবায়নকে স্প্রিং ডেটা জেপিএ কাঠামোর মধ্যে মোড় দেয়।


2
আমি মনে করি আমি একই প্রকল্পে মেশানো এবং মিলানোর চেয়ে বরং ক্যোয়ারির জন্য একই ধারাবাহিক এপিআই ব্যবহার করব। জটিল স্প্রিং ডেটা জেপিএ স্টাফের জন্য আমি এখনও একটি ভাল সমাধান খুঁজে পাইনি, এবং যেহেতু আমার কাছে সাধারণভাবে জেপিএর সাথে বেশ কয়েকটি নীটপিক রয়েছে, তাই আমি মনে করি যে আমার ওআরএম হিসাবে হাইবারনেট গ্রহণ করতে পেরে আমি আরও সুখী হতে পারি। আমার অনেক জটিল প্রশ্ন থাকবে এবং আমি 40/60 এর মিশ্রণ নিতে পারি না। এটি আমার পক্ষে মূল্যবান নয় :(
ইগারোয়ারি

1
আপনি স্প্রিং ডেটা ছাড়াই কুইরিডসেল সরাসরি ব্যবহার করতে পারেন যা আপনাকে জেপিএর শীর্ষে একক শক্তিশালী ক্যোয়ারী স্তর দেয়।
টিমো ওয়েস্টক্যাম্পার

4

স্প্রিং জেপিএ আপনাকে কোয়েরি পদ্ধতি ঘোষণার সাহায্যে এসকিউএল এবং এমনকি কিছু এইচকিউএল লেখা থেকে বিমূর্ততা সরবরাহ করবে। স্প্রিং জেপিএ এর ক্যোয়ারী প্রজন্মের সাথে জ্বলজ্বল করে তবে আপনি যখন খাঁটি হাইবারনেট সমাধান চান তখন বসন্তের জেপিএ হায়ারনেটের উপর ভিত্তি করে প্রয়োজন অনুযায়ী কাস্টমাইজ করতে পারেন। আরও তথ্যের জন্য দস্তাবেজগুলি http://static.springsource.org/spring-data/data-jpa/docs/current/references/html দেখুন।

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