কীভাবে জেপিএ সত্তা মেটামোডেল তৈরি করবেন?


97

সঙ্গে যুক্ত টাইপ নিরাপত্তার আত্মা CriteriaQuery JPA 2.0 এছাড়াও সমর্থন করার জন্য একটি API হয়েছে Metamodel সত্ত্বা প্রতিনিধিত্ব।

এই এপিআই (মেটোমোডেল ক্লাস নিজে হাতে তৈরি করার বিপরীতে মেটামোডেল উত্পন্ন করার জন্য) সম্পূর্ণরূপে কার্যকরী বাস্তবায়ন সম্পর্কে কেউ কি সচেতন? যদি কেউ এগ্রিপসে সেট আপ করার পদক্ষেপগুলিও জানেন তবে এটি দুর্দান্ত হবে (আমি ধরে নিলাম এটি একটি এনোটেশন প্রসেসর স্থাপনের মতোই সহজ, তবে আপনি কখনই জানেন না)।

সম্পাদনা: সবেমাত্র হাইবারনেট জেপিএ 2 মেটামোডেল জেনারেটর পেরিয়ে হোঁচট খেয়েছে । তবে সমস্যাটি রয়ে গেছে যেহেতু আমি জারের জন্য কোনও ডাউনলোড লিঙ্ক খুঁজে পাই না।

সম্পাদনা 2: আমি যখন এই প্রশ্নটি জিজ্ঞাসা করেছি তার পরে কিছুটা সময় পেরিয়ে গেছে তবে আমি ভেবেছিলাম যে আমি ফিরে এসে সোর্সফোর্সে হাইবারনেট জেপিএ মডেল জেনারেটর প্রকল্পে একটি লিঙ্ক যুক্ত করব

উত্তর:


88

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

হ্যাঁ তাই হয়। বিভিন্ন জেপিএ ২.০ বাস্তবায়নের জন্য এখানে বাস্তবায়ন ও নির্দেশনা রয়েছে:

EclipseLink

হাইবারনেট

ওপেনজেপিএ

ডেটা নিউক্লিয়াস


সর্বশেষ হাইবারনেট বাস্তবায়ন এখানে উপলব্ধ:

একটি প্রাচীন হাইবারনেট বাস্তবায়ন এখানে:


4
ডেটা নিউক্লিয়াস লিঙ্কটি মারা গেছে।
কার্ল রিখটার

4
হাইবারনেট লিঙ্কটিও মারা গেছে
ফ্রিল্যান্সার

43

দয়া করে জেপিএ-মেটামোডেলস-সাথে-মাভেন-উদাহরণটি দেখুন

হাইবারনেট

  • আমাদের দরকার org.hibernate.org:hibernate-jpamodelgen
  • প্রসেসর ক্লাস হয় org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor

নির্ভরতা হিসাবে হাইবারনেট

    <dependency>
      <groupId>org.hibernate.orm</groupId>
      <artifactId>hibernate-jpamodelgen</artifactId>
      <version>${version.hibernate-jpamodelgen}</version>
      <scope>provided</scope>
    </dependency>

প্রসেসর হিসাবে হাইবারনেট করুন

      <plugin>
        <groupId>org.bsc.maven</groupId>
        <artifactId>maven-processor-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
              <compilerArguments>-AaddGeneratedAnnotation=false</compilerArguments> <!-- suppress java.annotation -->
              <processors>
                <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
              </processors>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.hibernate.orm</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>${version.hibernate-jpamodelgen}</version>
          </dependency>
        </dependencies>
      </plugin>

ওপেনজেপিএ

  • আমাদের দরকার org.apache.openjpa:openjpa
  • প্রসেসর ক্লাস হয় org.apache.openjpa.persistence.meta.AnnotationProcessor6
  • ওপেনজেপিএর অতিরিক্ত উপাদান প্রয়োজন বলে মনে হচ্ছে <openjpa.metamodel>true<openjpa.metamodel>

ওপেনজেপিএ নির্ভরতা হিসাবে

  <dependencies>
    <dependency>
      <groupId>org.apache.openjpa</groupId>
      <artifactId>openjpa</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <compilerArgs>
            <arg>-Aopenjpa.metamodel=true</arg>
          </compilerArgs>
        </configuration>
      </plugin>
    </plugins>
  </build>

প্রসেসর হিসাবে ওপেনজেপিএ

      <plugin>
        <groupId>org.bsc.maven</groupId>
        <artifactId>maven-processor-plugin</artifactId>
        <executions>
          <execution>
            <id>process</id>
            <goals>
              <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
              <processors>
                <processor>org.apache.openjpa.persistence.meta.AnnotationProcessor6</processor>
              </processors>
              <optionMap>
                <openjpa.metamodel>true</openjpa.metamodel>
              </optionMap>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa</artifactId>
            <version>${version.openjpa}</version>
          </dependency>
        </dependencies>
      </plugin>

EclipseLink

  • আমাদের দরকার org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor
  • প্রসেসর ক্লাস হয় org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
  • EclipseLink প্রয়োজন persistence.xml

নির্ভরতা হিসাবে EclipseLink

  <dependencies>
    <dependency>
      <groupId>org.eclipse.persistence</groupId>
      <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
      <scope>provided</scope>
    </dependency>

প্রসেসর হিসাবে EclipseLink

    <plugins>
      <plugin>
        <groupId>org.bsc.maven</groupId>
        <artifactId>maven-processor-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
              <processors>
                <processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor>
              </processors>
              <compilerArguments>-Aeclipselink.persistencexml=src/main/resources-${environment.id}/META-INF/persistence.xml</compilerArguments>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
            <version>${version.eclipselink}</version>
          </dependency>
        </dependencies>
      </plugin>

ডেটা নিউক্লিয়াস

  • আমরা প্রয়োজন org.datanucleus:datanucleus-jpa-query
  • প্রসেসর ক্লাস হয় org.datanucleus.jpa.query.JPACriteriaProcessor

নির্ভরতা হিসাবে ডেটা নিউক্লিয়াস

  <dependencies>
    <dependency>
      <groupId>org.datanucleus</groupId>
      <artifactId>datanucleus-jpa-query</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

প্রসেসর হিসাবে ডেটা নিউক্লিয়াস

      <plugin>
        <groupId>org.bsc.maven</groupId>
        <artifactId>maven-processor-plugin</artifactId>
        <executions>
          <execution>
            <id>process</id>
            <goals>
              <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
              <processors>
                <processor>org.datanucleus.jpa.query.JPACriteriaProcessor</processor>
              </processors>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-jpa-query</artifactId>
            <version>${version.datanucleus}</version>
          </dependency>
        </dependencies>
      </plugin>

4
কেবল স্পষ্ট করেই, উত্পন্ন জিনিসগুলি এক্সপ্লিসিঙ্কের সাথে ব্যবহার করা যেতে পারে, যদিও আপনি এটি উত্পন্ন করতে হাইবারনেট ব্যবহার করেন, আমি নেটবিন 8 থেকে মেটা মডেল তৈরি করতে পারি না এবং আমার স্টাফ উত্পন্ন করার জন্য একটি মাভেন টেস্ট প্রকল্প তৈরি করতে হয়েছিল
কল্পনা সনি

@ ইয়ামাজোরোস কী বলা নিষিদ্ধ, তাই বলা something is recommendedযায় IMHO? আমি অন্য কারও পক্ষে প্রতিনিধিত্ব করছি না।
জিন কোওন

4
বিটিডাব্লু, সল্টারের উত্তর দেখুন এক্সিলিপলিংকের জন্য। এই কনফিগারেশনটি আমি বছরের পর বছর ধরে ব্যবহার করি এবং এটি পুরোপুরি কার্যকর হয় works stackoverflow.com/questions/3037593/...
ymajoros

এই বাস্তবায়ন নির্দিষ্ট আমি EclipseLink সঙ্গে হাইবারনেট উত্পন্ন metamodel ব্যবহার এবং নালপয়েন্টারএক্সেপশন পেতে চেষ্টা না
মাইকেল Ziobro

@ ইয়ামাজোরস এখনও একটি প্রয়োজন persistence.xml, তাই না?
জিন কোওন

20

ডালি (যা "JEE বিকাশকারীদের জন্য এক্লিপস আইডিই" অন্তর্ভুক্ত করা হয়েছে) মাধ্যমে Eclipse এর JPA 2.0 সমর্থন এর নিজস্ব মেটোমোডেল জেনারেটর রয়েছে Eclipse এর সাথে সংহত করে।

  1. প্যাকেজ এক্সপ্লোরারটিতে আপনার প্রকল্প নির্বাচন করুন
  2. বৈশিষ্ট্যগুলিতে যান -> জেপিএ ডায়ালগ
  3. ক্যানোনিকাল মেটামোডেল (JPA 2.0) থেকে উত্স ফোল্ডারটি নির্বাচন করুন গ্রুপ
  4. নির্বাচিত উত্স ফোল্ডারে মেটামোডেল ক্লাস তৈরি করতে প্রয়োগ বোতামটি ক্লিক করুন

এখানে চিত্র বর্ণনা লিখুন

উত্পন্ন ক্লাসগুলি মানসম্পন্ন হওয়ায় এটি কোনও জেপিএ সরবরাহকারীকে কাজ করা উচিত।

এছাড়াও এখানে দেখুন


প্রক্রিয়াটি নিজে থেকে সরিয়ে দেওয়ার কোনও উপায় আছে? এটি নির্ভরযোগ্যভাবে আমার জন্য
মেটোমোডেল

6

ইক্লিপসেলিংকের জন্য, কেবলমাত্র নিম্নোক্ত নির্ভরতা মেটোমোডেল তৈরির জন্য যথেষ্ট। আর কিছুর দরকার নেই।

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
        <version>2.5.1</version>
        <scope>provided</scope>
    </dependency>


@ বার্থেলোমিয়াস আপনার নোটটি মিথ্যা । এক্সিলিপলিংক ২.০.১+ অ-তালিকাভুক্ত প্রতিষ্ঠানগুলির জন্যও মেটোমোডেল ক্লাস তৈরি করবে, কেবল <exclude-unlisted-classes>false</exclude-unlisted-classes>দৃise়তার সাথে নির্দিষ্ট করুন x xML
মিশেল

দ্রষ্টব্য যে গ্রহপরিবর্তনটি persistence.xml
জেন কোয়ান

6

হাইবারনেট সরবরাহকারী হিসাবে যা সবচেয়ে সাধারণ আইএমএইচও:

গ্রেডল, মাভেনের মতো বিল্ড সরঞ্জামগুলির ক্ষেত্রে আপনার ক্লাসপথ এবং সংকলক স্তরে হাইবারনেট জেপিএ 2 মেটামোডেল জেনারেটর জার থাকা দরকার = = 1.6 আপনার যা প্রকল্প প্রয়োজন তা কেবল মেটামোডেল স্বয়ংক্রিয়ভাবে উত্পন্ন হবে।

IDE Eclipse এর ক্ষেত্রে 1. Goo Project-> Properties-> Java Compiler-> টিকা প্রক্রিয়াকরণ এবং এটিকে সক্ষম করুন enable ২. এনটোটেশন প্রসেসিং প্রসারণ করুন -> ফ্যাক্টরি পাথ-> বাহ্যিক জার যুক্ত করুন হাইবারনেট জেপিএ 2 মেটামোডেল জেনারেটর জার সদ্য যুক্ত হওয়া জারটি পরীক্ষা করে ঠিক আছে বলুন। ক্লিন অ্যান্ড বিল্ড শেষ!

হাইবারনেট জেপিএ 2 মেটামোডেল জেনারেটরের জার লিঙ্কটি ম্যাভেন রেপো থেকে লিঙ্ক করুন https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen


আমার ক্ষেত্রে <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <scope>compile</scope> </dependency> </dependencies>pom.xML যুক্ত করা যথেষ্ট ছিল।
Lu55

মেভেন এবং অ্যাকলিপস ব্যবহার করার সময় আমার কি দুটি কনফিগারেশন দরকার?
মেলকোর

যদিও হাইমনেট-জেপামোডেলজেনকে পমে যুক্ত করা হয়েছিল, আমাকে এটি করতে হয়েছিল এবং এটি কাজ করেছিল
ফ্রিল্যান্সার

এটিও গ্রহণযোগ্য উত্তর হওয়া উচিত। অনেক অনেক ধন্যবাদ সন্দীপ
শুভম আর্য

3

যেহেতু এটি একটি খুব সাধারণ প্রশ্ন, আমি এই নিবন্ধটি লিখেছি , যার ভিত্তিতে এই উত্তরটি ভিত্তিক।

আসুন আমাদের অ্যাপ্লিকেশন নিম্নলিখিত ব্যবহার অনুমান Post, PostComment, PostDetails, এবং Tagসত্ত্বা, যা একের সাথে অধিকের গঠন একের সাথে এক, এবং অনেক সাথে অধিকের টেবিল সম্পর্ক :

জেপিএ মানদণ্ড মেটামোডেল

জেপিএ ক্রিটারিয়া মেটামোডেল কীভাবে উত্পন্ন করা যায়

hibernate-jpamodelgenহাইবারনেট ORM দ্বারা উপলব্ধ সরঞ্জাম প্রকল্পের সত্ত্বা স্ক্যান এবং JPA নির্ণায়ক Metamodel জেনারেট করতে ব্যবহার করা যাবে। আপনাকে যা করতে হবে তা হ'ল মাভেন কনফিগারেশন ফাইলের মধ্যে নিম্নলিখিতটি যুক্ত annotationProcessorPathকরতে হবে:maven-compiler-pluginpom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${maven-compiler-plugin.version}</version>
    <configuration>
        <annotationProcessorPaths>
            <annotationProcessorPath>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-jpamodelgen</artifactId>
                <version>${hibernate.version}</version>
            </annotationProcessorPath>
        </annotationProcessorPaths>
    </configuration>
</plugin>

এখন, প্রকল্পটি সংকলিত হয়ে গেলে আপনি targetফোল্ডারে দেখতে পাচ্ছেন যে নিম্নলিখিত জাভা ক্লাসগুলি তৈরি করা হয়েছে:

> tree target/generated-sources/
target/generated-sources/
└── annotations
    └── com
        └── vladmihalcea
            └── book
                └── hpjp
                    └── hibernate
                        ├── forum
                        │   ├── PostComment_.java
                        │   ├── PostDetails_.java
                        │   ├── Post_.java
                        │   └── Tag_.java

ট্যাগ সত্তা মেটামোডেল

তাহলে Tagসত্তা নিম্নরূপ ম্যাপ করা হয়:

@Entity
@Table(name = "tag")
public class Tag {

    @Id
    private Long id;

    private String name;

    //Getters and setters omitted for brevity
}

Tag_Metamodel বর্গ ভালো উত্পন্ন হয়:

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Tag.class)
public abstract class Tag_ {

    public static volatile SingularAttribute<Tag, String> name;
    public static volatile SingularAttribute<Tag, Long> id;

    public static final String NAME = "name";
    public static final String ID = "id";
}

SingularAttributeমৌলিক জন্য ব্যবহার করা হয় idএবংname Tag JPA সত্তা বৈশিষ্ট্যাবলী।

পোস্ট সত্তা মেটামোডেল

Postসত্তা ভালো ম্যাপ করা হয়:

@Entity
@Table(name = "post")
public class Post {

    @Id
    private Long id;

    private String title;

    @OneToMany(
        mappedBy = "post",
        cascade = CascadeType.ALL,
        orphanRemoval = true
    )
    private List<PostComment> comments = new ArrayList<>();

    @OneToOne(
        mappedBy = "post",
        cascade = CascadeType.ALL,
        fetch = FetchType.LAZY
    )
    @LazyToOne(LazyToOneOption.NO_PROXY)
    private PostDetails details;

    @ManyToMany
    @JoinTable(
        name = "post_tag",
        joinColumns = @JoinColumn(name = "post_id"),
        inverseJoinColumns = @JoinColumn(name = "tag_id")
    )
    private List<Tag> tags = new ArrayList<>();

    //Getters and setters omitted for brevity
}

Postসত্তা দুটি মৌলিক বৈশিষ্ট্য আছে, idএবং title, একটি একের সাথে অধিকের commentsসংগ্রহ, একটি এক-এক detailsসমিতি, এবং একটি অনেক সাথে অধিকেরtags সংগ্রহ।

Post_Metamodel বর্গ নিম্নরূপ উত্পন্ন হয়:

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Post.class)
public abstract class Post_ {

    public static volatile ListAttribute<Post, PostComment> comments;
    public static volatile SingularAttribute<Post, PostDetails> details;
    public static volatile SingularAttribute<Post, Long> id;
    public static volatile SingularAttribute<Post, String> title;
    public static volatile ListAttribute<Post, Tag> tags;

    public static final String COMMENTS = "comments";
    public static final String DETAILS = "details";
    public static final String ID = "id";
    public static final String TITLE = "title";
    public static final String TAGS = "tags";
}

বেসিক idএবং titleবৈশিষ্ট্যগুলি পাশাপাশি ওয়ান-টু-ও- detailsঅ্যাসোসিয়েশন কিছু SingularAttributeসময় দ্বারা উপস্থাপিত হয় commentsএবং tagsসংগ্রহগুলি জেপিএ দ্বারা প্রতিনিধিত্ব করা হয়ListAttribute

পোস্টডেটেল সত্তা মেটামোডেল

PostDetailsসত্তা ভালো ম্যাপ করা হয়:

@Entity
@Table(name = "post_details")
public class PostDetails {

    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "created_on")
    private Date createdOn;

    @Column(name = "created_by")
    private String createdBy;

    @OneToOne(fetch = FetchType.LAZY)
    @MapsId
    @JoinColumn(name = "id")
    private Post post;

    //Getters and setters omitted for brevity
}

সমস্ত সত্তা বৈশিষ্ট্য SingularAttributeসম্পর্কিত PostDetails_মেটোমোডেল শ্রেণিতে জেপিএ দ্বারা প্রতিনিধিত্ব করতে চলেছে :

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(PostDetails.class)
public abstract class PostDetails_ {

    public static volatile SingularAttribute<PostDetails, Post> post;
    public static volatile SingularAttribute<PostDetails, String> createdBy;
    public static volatile SingularAttribute<PostDetails, Long> id;
    public static volatile SingularAttribute<PostDetails, Date> createdOn;

    public static final String POST = "post";
    public static final String CREATED_BY = "createdBy";
    public static final String ID = "id";
    public static final String CREATED_ON = "createdOn";
}

পোস্টকমেন্ট সত্তা মেটামোডেল

PostCommentনিম্নরূপ ম্যাপ করা হয়:

@Entity
@Table(name = "post_comment")
public class PostComment {

    @Id
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    private Post post;

    private String review;

    //Getters and setters omitted for brevity
}

এবং, সমস্ত সত্তা বৈশিষ্ট্য SingularAttributeসম্পর্কিত PostComments_মেটোমোডেল শ্রেণিতে জেপিএ দ্বারা প্রতিনিধিত্ব করা হয় :

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(PostComment.class)
public abstract class PostComment_ {

    public static volatile SingularAttribute<PostComment, Post> post;
    public static volatile SingularAttribute<PostComment, String> review;
    public static volatile SingularAttribute<PostComment, Long> id;

    public static final String POST = "post";
    public static final String REVIEW = "review";
    public static final String ID = "id";
}

জেপিএ ক্রিটারিয়া মেটামোডেল ব্যবহার করে

জেপিএ মেটামোডেল ছাড়াই, PostCommentতাদের সম্পর্কিত Postশিরোনাম দ্বারা ফিল্টার করা সত্তাগুলি আনতে হবে এমন একটি ক্রেতারিয়া এপিআই কোয়েরিটি দেখতে এই রকম হবে:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<PostComment> query = builder.createQuery(PostComment.class);
Root<PostComment> postComment = query.from(PostComment.class);

Join<PostComment, Post> post = postComment.join("post");

query.where(
    builder.equal(
        post.get("title"),
        "High-Performance Java Persistence"
    )
);

List<PostComment> comments = entityManager
    .createQuery(query)
    .getResultList();

লক্ষ্য করুন যে দৃষ্টান্তটি postতৈরি করার সময় Joinআমরা titleস্ট্রিংকে আক্ষরিক ব্যবহার করেছি এবং রেফারেন্স দেওয়ার সময় স্ট্রিং আক্ষরিক ব্যবহার করেছি Post title

জেপিএ মেটোমোডেল আমাদের হার্ড-কোডিং সত্তা বৈশিষ্ট্যগুলি এড়াতে দেয়, যেমন নীচের উদাহরণ দ্বারা চিত্রিত:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<PostComment> query = builder.createQuery(PostComment.class);
Root<PostComment> postComment = query.from(PostComment.class);

Join<PostComment, Post> post = postComment.join(PostComment_.post);

query.where(
    builder.equal(
        post.get(Post_.title),
        "High-Performance Java Persistence"
    )
);

List<PostComment> comments = entityManager
    .createQuery(query)
    .getResultList();

আপনি কোডোটার মতো কোনও কোড সমাপ্তির সরঞ্জাম ব্যবহার করছেন যদি জেপিএ ক্রিটারিয়া এপিআই ক্যোরিয়াসগুলি লেখা অনেক সহজ। পরীক্ষা করে দেখুন এই নিবন্ধটি Codota আইডিই প্লাগইন সম্পর্কে আরো বিস্তারিত জানার জন্য।

অথবা, ধরুন আমরা একটি আনতে চান DTO অভিক্ষেপ যখন ফিল্টারিং Post titleএবংPostDetails createdOn বৈশিষ্ট্যগুলি ।

যোগদানের বৈশিষ্ট্যগুলি তৈরি করার সময়, পাশাপাশি ডিটিও প্রজেকশন কলাম এলিয়াসগুলি তৈরি করার সময় বা আমাদের ফিল্টার করার জন্য সত্তা বৈশিষ্ট্যগুলি উল্লেখ করার সময় আমরা মেটামোডেল ব্যবহার করতে পারি:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<Object[]> query = builder.createQuery(Object[].class);

Root<PostComment> postComment = query.from(PostComment.class);
Join<PostComment, Post> post = postComment.join(PostComment_.post);

query.multiselect(
    postComment.get(PostComment_.id).alias(PostComment_.ID),
    postComment.get(PostComment_.review).alias(PostComment_.REVIEW),
    post.get(Post_.title).alias(Post_.TITLE)
);

query.where(
    builder.and(
        builder.like(
            post.get(Post_.title),
            "%Java Persistence%"
        ),
        builder.equal(
            post.get(Post_.details).get(PostDetails_.CREATED_BY),
            "Vlad Mihalcea"
        )
    )
);

List<PostCommentSummary> comments = entityManager
    .createQuery(query)
    .unwrap(Query.class)
    .setResultTransformer(Transformers.aliasToBean(PostCommentSummary.class))
    .getResultList();

ঠিক আছে তো?


0

ঠিক আছে, আমি এখানে যা পড়েছি তার উপর ভিত্তি করে, আমি এইভাবে এ্যাকলিপস লিঙ্কটি দিয়েছিলাম এবং প্রসেসরের নির্ভরতা প্রজেক্টের উপর নির্ভর করতে হবে না, কেবল annotationProcessorPathসংকলক প্লাগইনের একটি উপাদান হিসাবে ।

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <annotationProcessorPaths>
                <annotationProcessorPath>
                    <groupId>org.eclipse.persistence</groupId>
                    <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
                    <version>2.7.7</version>
                </annotationProcessorPath>
            </annotationProcessorPaths>
            <compilerArgs>
                <arg>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</arg>
            </compilerArgs>
        </configuration>
    </plugin>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.