হাইবারনেট সমস্যা - "একটি মানবিহীন শ্রেণিকে টার্গেট করে @ অ্যানটোম্যানি বা @ ম্যানিটোম্যানির ব্যবহার"


113

আমি হাইবারনেট টীকাগুলির সাথে আমার পাগুলি খুঁজে পাচ্ছি এবং আমি একটি সমস্যার মুখোমুখি হয়েছি আশা করি কেউ কেউ এর সাথে সহায়তা করতে পারে।

আমার 2 টি সত্ত্বা রয়েছে, বিভাগ এবং স্কোপটপিক। বিভাগে একটি তালিকার শ্রেণীর সদস্য রয়েছে, তাই একের সাথে অনেকের মধ্যে সম্পর্ক। আমি আমার ইউনিট পরীক্ষা চালানোর সময় আমি এই ব্যতিক্রম পাচ্ছি:

একটি আনম্যাপড শ্রেণিকে লক্ষ্য করে @ অ্যানটোম্যানি বা @ ম্যানি টোম্যানির ব্যবহার: com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

আমি ধরে নেব যে ত্রুটিটি বোঝায় যে আমার স্কোপটপিক সত্তা কোনও টেবিলে ম্যাপ করা হয়নি? আমি ভুল করেছি বলে দেখতে পাচ্ছি না। এখানে সত্ত্বা শ্রেণি রয়েছে:


@Entity
public class Section {
    private Long id;
    private List<ScopeTopic> scopeTopics;

    public Section() {}

    @Id
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToMany
    @JoinTable(name = "section_scope", joinColumns = {@JoinColumn(name="section_id")},
               inverseJoinColumns = {@JoinColumn(name="scope_topic_id")} )
    public List<ScopeTopic> getScopeTopic() {
        return scopeTopic;
    }

    public void setScopeTopic(List<ScopeTopic> scopeTopic) {
        this.scopeTopic = scopeTopic;
    }
}

@Entity
@Table(name = "scope_topic")
public class ScopeTopic {
    private Long id;
    private String topic;

    public ScopeTopic() {}

    @Id
    public Long getId() {
        return id;
    }

    public void setId() {
        this.id = id;
    }

    public String getTopic() {
        return topic;
    }

    public void setTopic(String topic) {
        this.topic = topic;
    }
}

আমি যথেষ্ট নিশ্চিত যে এটি আমার নিজের বোঝার অভাব যা দোষের ফলে কিছু দিকনির্দেশনা দুর্দান্ত হবে, ধন্যবাদ!

উত্তর:


247

আপনার মন্তব্যগুলি দেখতে দুর্দান্ত look এখানে যাচাই করার জন্য জিনিসগুলি এখানে:

  • নিশ্চিত করুন যে টীকাটি রয়েছে javax.persistence.Entityএবং না org.hibernate.annotations.Entity। প্রাক্তন সত্তাকে সনাক্তযোগ্য করে তোলে। দ্বিতীয়টি কেবল একটি সংযোজন।

  • যদি আপনি ম্যানুয়ালি আপনার সত্তা তালিকাভুক্ত করছেন (জেদ.এক্সএমএমএল, হাইবারনেট.এফ.জি.এম.এল, অথবা আপনার সেশন কারখানাটি কনফিগার করার সময়), তবে নিশ্চিত হয়ে নিন যে আপনি ScopeTopicসত্তাটি তালিকাভুক্তও করেছেন

  • আপনার ScopeTopicবিভিন্ন প্যাকেজে একাধিক ক্লাস না রয়েছে তা নিশ্চিত করুন এবং আপনি ভুলটি আমদানি করেছেন।


19
আহ, ধন্যবাদ! পয়েন্ট 2 কী ছিল, সেশনফ্যাক্টরি তৈরি করার সময় আমি স্ক্র্যাপটপিকটি আমার টীকাগুলির শ্রেণীর সম্পত্তি তালিকায় রাখতে ভুলে গিয়েছিলাম, n00b ত্রুটি!
C0deAttack

4
যারা এই মন্তব্যটি মারছেন তাদের জন্য। org.hibernate.annotations.Entity হাইবারনেটে 4. পয়েন্ট 1 আর প্রয়োগ করা হয় না।
gspatel

আমার জন্য এটি পয়েন্ট 2 ছিল, কারণ আমি আমার বিল্ড ফোল্ডারে হাইবারনেট সিএফজি.এক্সএমএল সম্পাদনা করে চলেছি।
টর্স্টেন

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

আমার ক্ষেত্রে আমি প্যাকেজটি স্ক্যান করতে ভুলে গিয়েছিpackagesToScan
শিভা

24

আমার @Entityঅনেক সাইড সত্তা ছিল না

@Entity // this was commented
@Table(name = "some_table")
public class ChildEntity {
    @JoinColumn(name = "parent", referencedColumnName = "id")
    @ManyToOne
    private ParentEntity parentEntity;
}

22

আপনার সত্তা হাইবারনেট কনফিগারেশন ফাইলে তালিকাভুক্ত নাও হতে পারে।


7

প্রায় মধ্যে Hibernate, যোগ করতে হবে Entityক্লাস hibernate.cfg.xmllike-

<hibernate-configuration>
  <session-factory>

    ....
    <mapping class="xxx.xxx.yourEntityName"/>
 </session-factory>
</hibernate-configuration>

3

আপনি যদি কোনও বসন্ত-ডেটা-জেপিএ প্রকল্পে জাভা কনফিগারেশন ব্যবহার করছেন তবে সত্তা যে প্যাকেজটি রয়েছে তা আপনি স্ক্যান করে নিচ্ছেন তা নিশ্চিত করুন For উদাহরণস্বরূপ, সত্তা যদি com.foo.myservice.things থাকতেন তবে নীচের নীচের কনফিগারেশন টীকাটি না এটা উপরে তোলো.

আপনি এটিকে কেবল com.foo.myservice পর্যন্ত শিথিল করে এটি ঠিক করতে পারেন (অবশ্যই, সত্তাগুলির জন্য স্ক্যান করার জন্য আপনার সুযোগ প্রশস্ত করার কোনও অন্য প্রভাব মনে রাখবেন)।

@Configuration
@EnableJpaAuditing
@EnableJpaRepositories("com.foo.myservice.repositories")
public class RepositoryConfiguration {
}

1

আমার একই সমস্যা ছিল এবং আমি অধ্যবসত.এক্সএমএলে সত্তা যুক্ত করে এটি সমাধান করতে পারি। সত্তাটি দৃ config়তা কনফিগারেশনে যুক্ত করা হয়নি বলে এই সমস্যাটি হয়েছিল। আপনার অধ্যবসায় ফাইলটি সম্পাদনা করুন:

<persistence-unit name="MY_PU" transaction-type="RESOURCE_LOCAL">
<provider>`enter code here`
     org.hibernate.jpa.HibernatePersistenceProvider
  </provider>
<class>mypackage.MyEntity</class>

...


1

আমার ক্ষেত্রে যখন আমার ঘর তৈরি করা হচ্ছে তখন আমার ক্লাস যুক্ত SessionFactoryকরতে হবেaddAnnotationClass

Configuration configuration.configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration
            .addAnnotatedClass(MyEntity1.class)
            .addAnnotatedClass(MyEntity2.class)
            .buildSessionFactory(builder.build());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.