হাইবারনেট-সিকোয়েন্স বিদ্যমান নেই


88

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

10:53:32,185 ERROR TableStructure:149 - could not read a hi value
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist 

আমি টীকা সহ অটো বর্ধিত আইডি পরিবর্তন করেছি

@GeneratedValue(strategy=GenerationType.AUTO) 

এখনও ত্রুটি রয়ে গেছে।


4
কনফিগারেশনের ফাইল prop <প্রোপ কি = "হাইবারনেট.আইড.নেই_জেনেটর_ম্যাপিংস"> মিথ্যা </ p>> এ সেট করার চেষ্টা করুন
ইভা মরিয়ম

উত্তর:


123

আপনি এটিও রাখতে পারেন:

@GeneratedValue(strategy = GenerationType.IDENTITY)

এবং ডেটবেসটিকে প্রাথমিক কীটির বর্ধিতকরণ পরিচালনা করতে দিন:

AUTO_INCREMENT PRIMARY KEY

13
এটি কিছু ক্ষেত্রে ভাল হতে পারে তবে এর একটি স্পষ্টতই ব্যর্থতা রয়েছে: INSERTআইডিটি আনার জন্য প্রতিটিই ডেটাবেসগুলিতে একটি অতিরিক্ত রাউন্ড ট্রিপ ঘটাচ্ছে। সুতরাং যখন এই অপূর্ণতা গ্রহণযোগ্য, জরিমানা।
জি ডেমেকি

@ জি ডিমেকি আপনি কি এই রাউন্ড ট্রিপ পদ্ধতির বিপরীতে হাইবারনেটস পরিচয় জেনারেটর ব্যবহারের উপকারিতা এবং বিধিগুলি আলোচনা করতে সক্ষম হবেন? সত্যিই দরকারী হবে!
জর্ডান ম্যাকি

83

আপনাকে হাইবারনেট 5.x এর জন্য সেট করতে হবে <property name="hibernate.id.new_generator_mappings">false</property>.. দেখুন এবং লিঙ্ক করুন

হাইবারনেট ৪.x এর পুরানো সংস্করণের জন্য: <prop key="hibernate.id.new_generator_mappings">false</prop>


এটি কোথায় যুক্ত হয়?
স্যামুয়েল থম্পসন

4
হাইবারনেট বৈশিষ্ট্যে এটি যুক্ত করুন।
পার্বতী

জাভাডোকস অফ ইন্টারেস্ট - ডকস.জবোস.আর
হাইবারনেট /

10
আপনার উত্তরটি প্রশ্নের সমাধান হতে পারে, তবে এটি কেন সমস্যার সমাধান করে তা ব্যাখ্যা করে না। দয়া করে মনে রাখবেন, যে লিঙ্কগুলি মারা যায়।
ক্লাইজস্টার

51

স্প্রিং বুট নিয়ে কাজ করা

সমাধান

.Application.properties এ স্ট্রিংটি নীচে রাখুন

spring.jpa.properties.hibernate.id.new_generator_mappings=false

ব্যাখ্যা

হাইবারনেট 4. এক্স এ এই বৈশিষ্ট্যটি ডিফল্ট হয় true


30

এই ত্রুটির পিছনে কারণ:

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


4
এটি উত্তর হিসাবে চিহ্নিত করা উচিত কারণ এটি সহজভাবে বিষয়গুলিকে ব্যাখ্যা করে - অবশ্যই "বসন্ত.জেপা.প্রপ্রেটিস.হবারনেট.আইড.নেই_জেনেটর_ম্যাপিংস = মিথ্যা" এর একটি উল্লেখ অবশ্যই উল্লেখ করা উচিত তবে ধন্যবাদ।
নাইটফুরি

15

আমি একই ত্রুটি পেয়েছিলাম "com.mysql.jdbc.exferences.jdbc4.MySQLSyntaxErrorException: সারণী 'mylocaldb.hibernate_sequence' বিদ্যমান নেই"।

স্প্রিং এমভিসি 4.3.7 এবং হাইবারনেট সংস্করণ 5.2.9 ব্যবহার করে স্প্রিং জাভা ভিত্তিক কনফিগারেশন ব্যবহার করে অ্যাপ্লিকেশন তৈরি করা হয়। এখন আমাকে hibernate.id.new_generator_mappingsআমার কোডে @ ইভা মারিয়াম দ্বারা উল্লিখিত সম্পত্তিটি যুক্ত করতে হবে :

@Autowired
    @Bean(name = "sessionFactory")
    public SessionFactory getSessionFactory(DataSource dataSource) {

        LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
        sessionBuilder.addProperties(getHibernateProperties());
        sessionBuilder.addAnnotatedClasses(User.class);

        return sessionBuilder.buildSessionFactory();
    }

    private Properties getHibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.show_sql", "true");
        properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
        properties.put("hibernate.id.new_generator_mappings","false");
        return properties;
    }

এবং এটি কবজ মত কাজ করে।


14

এফওয়াইআই

যদি আপনি ও / আর ম্যাপিং সংজ্ঞায়নের জন্য এইচবিএম ফাইল ব্যবহার করেন।

লক্ষ্য করুন:

হাইবারনেট 5-এ, সিকোয়েন্স নামের জন্য পরম নাম পরিবর্তন করা হয়েছে

হাইবারনেট 4 এ নিম্নলিখিত সেটিংসটি দুর্দান্ত কাজ করেছে :

<generator class="sequence">
    <param name="sequence">xxxxxx_seq</param>
</generator>

কিন্তু এ হাইবারনেট 5 , একই ম্যাপিং সেটিং ফাইলটি একটি ত্রুটি "hibernate_sequence অস্তিত্ব নেই" হতে হবে।

এই ত্রুটিটি ঠিক করতে, পরম নামটি অবশ্যই এতে পরিবর্তন করতে হবে:

<generator class="sequence">
    <param name="sequence_name">xxxxxx_seq</param>
</generator>

এই সমস্যাটি আমাকে 2, 3 ঘন্টা নষ্ট করে।

এবং একরকম, দেখে মনে হচ্ছে এটি সম্পর্কে কোনও নথি নেই

Org.hibernate.id.enhanced.SequenceStyleGenerator এর উত্স কোডটি পড়তে হবে এটি বের করার জন্য


7

আপনি যখন ব্যবহার

@GeneratedValue(strategy=GenerationType.AUTO)

বা

@GeneratedValue যা উপরেরটির সংক্ষিপ্ততর উপায়, হাইবারনেট আপনার জন্য সেরা প্রজন্মের কৌশল সিদ্ধান্ত নিতে শুরু করে, এক্ষেত্রে এটি নির্বাচন করেছে

GenerationType.SEQUENCE কৌশল হিসাবে এবং তাই এটি অনুসন্ধান করছে

schemaName.hibernate_sequence ক্রম ভিত্তিক আইডি উত্পন্নকরণের জন্য এটি একটি টেবিল।

আপনি GenerationType.SEQUENCEকৌশল হিসাবে ব্যবহার করার সময় আপনাকে @TableGeneratorনিম্নলিখিতগুলি সরবরাহ করতে হবে।

     @Id
     @GeneratedValue(strategy = GenerationType.TABLE, generator = "user_table_generator")
     @TableGenerator(name = "user_table_generator",
                table = "user_keys", pkColumnName = "PK_NAME", valueColumnName = "PK_VALUE")
     @Column(name = "USER_ID")
     private long userId;

আপনি কৌশলটি সেট করার সময় এটি করতে পারেন

@GeneratedValue(strategy = GenerationType.IDENTITY)

আসল সমস্যাটি সমাধান হয়ে যায় কারণ হাইবারনেট সিকোয়েন্স সারণীর সন্ধান বন্ধ করে দেয়।


7

আমি আজ যেমন করেছিলাম তেমন কেউ যদি এই সমস্যাটি নিয়ে তাদের চুল টানেন তবে আমি পরিবর্তন না হওয়া পর্যন্ত আমি এই ত্রুটিটি সমাধান করতে পারিনি

spring.jpa.hibernate.dll-auto=create

প্রতি

spring.jpa.properties.hibernate.hbm2ddl.auto=create

5

হাইবারনেট ৫.x এ, আপনার হাইবারনেট.আইডি.নিউ_জেনেটর_ম্যাপিংস হাইবারনেট.সিএফজি.এক্সএমএল এ মিথ্যাতে যুক্ত করা উচিত

<session-factory>
    ......
    <property name="show_sql">1</property>
    <property name="hibernate.id.new_generator_mappings">false</property>
     ......
 </session-factory>

2

আপনি এটিও রাখতে পারেন:

@GeneratedValue(strategy = GenerationType.IDENTITY)

এবং ডেটবেসটিকে প্রাথমিক কীটির বর্ধিতকরণ পরিচালনা করতে দিন:

AUTO_INCREMENT PRIMARY KEY

উপরের উত্তরটি আমাকে সাহায্য করেছিল।


2

আপনি যদি হাইবারনেট 5 এর পূর্বে হাইবারনেট সংস্করণ ব্যবহার করেন তবে মনোযোগের @GeneratedValue(strategy = GenerationType.IDENTITY)মতো কাজ করে। তবে হাইবারনেট 5 পোস্ট করুন নিম্নলিখিত ফিক্সটি প্রয়োজনীয়।

@Id
@GeneratedValue(strategy= GenerationType.AUTO,generator="native")
@GenericGenerator(name = "native",strategy = "native")
private Long id;

ডিডিএল

`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY

কারণ

থেকে উদ্ধৃতাংশ হাইবারনেট-ইস্যু

বর্তমানে, যদি হাইবারনেট.আইড.নেউ_জেনেটর_ম্যাপিংসগুলি মিথ্যাতে সেট করা থাকে তবে @ জেনারেটেডভ্যালু (কৌশল = জেনারেশনটাইপ.আউটো) স্থানীয়ভাবে ম্যাপ করা হয়। যদি এই সম্পত্তিটি সত্য হয় (যা 5.x-তে ডিফল্ট মান), তবে @ জেনারেটভ্যালু (কৌশল = জেনারেশনটাইপ.আউটও) সর্বদা সিকোয়েন্স স্টাইলজেনেটরে ম্যাপ করা হয়।

এই কারণে, এমন কোনও ডাটাবেসে যা সিকোয়েন্সগুলি স্থানীয়ভাবে সমর্থন করে না (যেমন মাইএসকিউএল) আমরা পরিচয়ের পরিবর্তে টেবিল জেনারেটরটি ব্যবহার করতে যাচ্ছি।

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


0

এটি HHH-10876 এর কারণে হতে পারে যা স্থির হয়ে গেছে তাই নিশ্চিত হয়ে নিন যে আপনি আপডেট করেছেন:

  • হাইবারনেট ওআরএম 5.2.1,
  • হাইবারনেট ওআরএম 5.1.1,
  • হাইবারনেট ওআরএম 5.0.11

4
আমি স্প্রিং-ডেটা-জেপিএ ব্যবহার করছি যা অভ্যন্তরীণভাবে Hibernate 5.2.17.Finalএকটি বাস্তবায়ন হিসাবে ব্যবহার করছে । আমি এখনও এই সমস্যা পাচ্ছি যখন GenerationTypeহয় AUTO
TheCoder

0

আমি পোস্টগ্রোসে হাইবারনেট ক্রম যুক্ত করেছি। পোস্টগ্রেস সম্পাদক এ এই ক্যোয়ারী চালান:

    CREATE SEQUENCE hibernate_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 2
  CACHE 1;
ALTER TABLE hibernate_sequence
  OWNER TO postgres;

আমি কোয়েরিটি ব্যবহার করার পক্ষে / কৌশলগুলি খুঁজে বের করব তবে যার সাহায্যের প্রয়োজন এটি এটি ব্যবহার করতে পারে।


0

আমার ক্ষেত্রে, সব টীকা প্রতিস্থাপন GenerationType.AUTOদ্বারা GenerationType.SEQUENCEইস্যু সমাধান।


-2

এই কোয়েরিটি চালান

create sequence hibernate_sequence start with 1 increment by 1

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