2012-12-16 9 views
9

मेरे पास एक साधारण इकाई है। मैं वसंत-डेटा-जेपीए संस्करण 1.2.0.RELEASE और eclipselink 2.4.1 का उपयोग कर रहा हूँ।वसंत-डेटा-जेपीए से लौटाई गई इकाई में आईडी सेट क्यों नहीं है

@Entity 
@Table(name="platform") 
public class Platform { 

    @Id 
    @Column(name="id", nullable=false, updatable=false, insertable=true) 
    private Long id; 
    // etc. 
} 

मैं इसे सहेजना चाहता हूं। मेरे भंडार लग रहा है

public interface PlatformRepository extends JpaRepository<Platform, Long> { 

    Platform findByName(String name); 
} 

मेरे नियंत्रक की तरह इस विधि

@RequestMapping(method=RequestMethod.POST, produces="application/json") 
public Platform post(Platform platform) { 
    Platform result = platformDao.saveAndFlush(platform); 
    return result; 
} 

और उस विधि से प्रतिक्रिया के साथ बहुत आसान है है

{"platform":{"id":null,"name":"Test1"}} 

* चयन मंच से पता चलता से Test1 एक आईडी है 6 की तालिका को परिभाषित किया गया है:

create table platform(
id int not null auto_increment primary key, 
name varchar(128) not null); 

मुझे उम्मीद है कि सहेजने के बाद आईडी सेट की जाएगी, लेकिन ऐसा नहीं है। वे मुझे इकाई लिखने के तुरंत बाद एक लुकअप करने की उम्मीद नहीं कर रहे हैं, है ना?

+0

बस अनुमान लगाएं: 'id' से' long' से 'int' और' insertable = true' को 'false' में बदलने का प्रयास करें। इसके अलावा, [* यह *] (http://stackoverflow.com/questions/12122489/jparepository-transaction-and-repository-Saveandflush) प्रासंगिक हो सकता है। – alfasin

उत्तर

13

आपने यह निर्दिष्ट नहीं किया है कि आईडी आपके मैपिंग में डेटाबेस द्वारा स्वत: उत्पन्न की गई थी।

@GeneratedValue(strategy = GenerationType.IDENTITY) 

अपने आईडी क्षेत्र में जोड़े। इसके बिना, जेपीए को नहीं पता कि डेटाबेस से जेनरेट आईडी प्राप्त करने के लिए इसे सम्मिलन के बाद एक चुनिंदा कथन निष्पादित करना होगा।

+0

दुह ... मुझे वह पता था। जैसे ही मैं इसे सत्यापित करता हूं, मैं इसे स्वीकार कर दूंगा। – digitaljoel

संबंधित मुद्दे