2015-04-21 6 views
8

मैं जेपीए बैच अद्यतन हाइबरनेट प्रदर्शन कर रहा है और इसके लिए मुझे निम्न त्रुटिPostgres त्रुटि: "hibernate_sequence" संबंध मौजूद नहीं है स्थिति 17

2015-04-21 15:53:51,907 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) SQL Error: 0, SQLState: 42P01 
2015-04-21 15:53:51,908 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) ERROR: relation "my_seq_gen" does not exist 

दे रहा postgres डेटाबेस का उपयोग कर रहा हूँ और मेरा पहचान पत्र ऑटो

उत्पन्न होता है
@Id 
@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN"initialValue=205, allocationSize=12) 
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="seq-gen") 
@Column(name="\"ID\"",unique=true,nullable=false) 
private int id; 

यह मेरा बैच डालने कोड स्निपेट

getEm().getTransaction().begin(); 
System.out.println("transaction started--------------"); 
try { 
    for (Receipt ReceiptEntity : arrReceiptEntity) { 
      getEm().persist(ReceiptEntity); 
    } 
    getEm().getTransaction().commit(); 
    System.out.println("commited"); 
} catch (Exception exception) { 
    System.out.println("error----------------------------------------------------------------------"); 
    if(getEm().getTransaction().isActive()) 
     getEm().getTransaction().rollback(); 
    LOG.error(exception); 
} finally { 
    getEm().flush(); 
    getEm().clear(); 
    getEm().close(); 
} 

मैं के लिए शामिल किया है है persistence.xml

  <property name="hibernate.id.new_generator_mappings" value="true"/> 

कृपया बताएं कि मैं क्या गलत कर रहा हूं।

+0

कोशिश GenerationType.IDENTITY – Pratik

+0

http://stackoverflow.com/a/25279598/592355 – xerx593

उत्तर

2

आप निम्नलिखित की कोशिश कर सकते हैं:

@Id 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "auto_gen") 
    @SequenceGenerator(name = "auto_gen", sequenceName = "A") 
    @Column(name = "ID") 
    private int id; 

धन्यवाद

+0

मैं जोड़ लिया है अनुक्रम जनरेटर के लिए होता है लेकिन इसकी एक और त्रुटि है अद्यतन सवाल की जांच करें – kirti

4

आप अपनी इकाई परिभाषा को बदलने के लिए नहीं करना चाहते हैं, तो आप नाम hibernate_sequence के साथ अपने PostgreSQL स्कीमा में एक दृश्य बनाने के लिए की जरूरत है।

CREATE SEQUENCE hibernate_sequence START 1; 

अद्यतन:

आप दूसरे अनुक्रम generatef है, जो आप अपनी इकाई के लिए परिभाषित किया गया याद कर रहे हैं, बस पिछले एक की तरह जोड़ें:

CREATE SEQUENCE my_seq_gen START 1; 

गले में उपयोगी ट्यूटोरियल: http://www.concretepage.com/hibernate/generatedvalue-strategy-generationtype-sequence-hibernate

+0

मैंने अनुक्रम जनरेटर जोड़ा है लेकिन यह एक और त्रुटि दे रहा है कृपया अद्यतन प्रश्न – kirti

+0

जांचें क्योंकि आपका अपवाद कहता है, आप अभी भी एक अनुक्रम my_seq_gen खो रहे हैं, इसे पहले के रूप में जोड़ें। – Beri

3

मुझे आशा है कि आपको जवाब मिल जाएगा लेकिन अगर आपको अभी भी जवाब मिल रहा है तो यह हो सकता है उपयोगी।

मुझे एक ही समस्या थी और इसे @SequenceGenerator और @GeneratedValue के साथ आईडी के गेटर विधि को एनोटेट करने का संकल्प किया गया। टिप्पणी करने के लिए

@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN", initialValue=205, allocationSize=12) 
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="seq-gen") 
public int getId(){ 
    return id; 
} 
16

कोशिश अपने साथ id@Id और @GeneratedValue(strategy=GenerationType.IDENTITY)। यह PostgreSql के साथ मेरे लिए काम किया।

अद्यतन: यह केवल काम करता है, तो अपनी पहचान स्तंभ SERIAL या BIGSERIAL प्रकार के रूप में घोषित किया गया था होगा।

+0

यह समाधान मेरे लिए काम करता है thx man –

+0

क्या पोस्टग्रेस्क्ल के लिए पहचान खराब विकल्प नहीं है? https://stackoverflow.com/questions/10041938/how-to-choose-the-id-generation-strategy-when-using-jpa-and-hibernate – Erlan

+0

@ एरलान मुझे कोई कारण नहीं दिखता कि यह बुरा क्यों होना चाहिए, न ही आपका लिंक, न ही मेरे अनुभव से। क्या आप अपना मुद्दा समझा सकते हैं? –

2

मैं एक ही समस्या के साथ था। मैंने पोस्ट किए गए पोस्टग्रेज़ पर तालिका से आईडी कॉलम पर ऑटो वृद्धि को हल करने का हल किया।

ALTER TABLE mytable ALTER COLUMN id SET DEFAULT nextval('mytable_id_seq'); 

ALTER SEQUENCE mytable_id_seq OWNED BY mytable.id; 
0

मेरे मामले जोड़ने संपत्ति नाम = "hibernate.hbm2ddl.auto" मान = "अद्यतन" में, इस मुद्दे को हल किया। आप persistence.xml

1

में वर्णित संपत्ति जोड़ने के लिए एक पोस्ट के अनुसार, hibernate could not get next sequence value , निर्धारित किया है अपने रणनीति GenerationType.IDENTITY बजाय की GenerationType.SEQUENCE साथ स्तंभ @GeneratedId।तो, आप GenerationType.AUTO के बजाय

@Id 
@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN"initialValue=205, allocationSize=12) 
@GeneratedValue(strategy= GenerationType.IDENTITY, generator="seq-gen") 
@Column(name="\"ID\"",unique=true,nullable=false) 
private int id; 
संबंधित मुद्दे