2016-01-28 133 views
0

我一直在连接到我的数据库和插入数据到它的问题。我连接到它没有注释,但我需要使用注释。休眠和Java

我hibernate.cfg.xml文件如下

<hibernate-configuration> 
    <session-factory> 

     <property name = "hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
     <property name = "hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <property name = "hibernate.connection.url">jdbc:oracle:thin:@fullproject.cyephgag55my.us-east-1.rds.amazonaws.com:1521:ORCL</property> 
     <property name = "hibernate.connection.username">sa</property> 
     <property name = "hibernate.connection.password">abcd1234</property> 
     <!-- Hibernate Options 
     <property name = "show_sql">true</property> 
     <property name="connection.pool_size">1</property> 
     <property name="hbm2ddl.auto">update</property>--> 
     <mapping resource="Db.hbm.xml"/> 
     <mapping class="com.exam.PersonalInfo"/> 
    </session-factory> 
</hibernate-configuration> 

我的POJO的是

import javax.persistence.*; 
@Entity 
@Table(name = "PersonalInfo") 
public class PersonalInfo { 
    @Id @GeneratedValue 
    @Column 
    private String fname; 
    @Column 
    private String lname; 
    @Column 
    private int ssn; 
    @Column 
    private String dob; 
    @Column 
    private String address; 
    @Column 
    private String city; 
    @Column 
    private String state; 
    @Column 
    private String email; 
    @Column 
    private String password; 
    @Column 
    private String phoneNum; 

    public String getFname() { 
     return fname; 
    } 
    public void setFname(String fname) { 
     this.fname = fname; 
    } 
    public String getLname() { 
     return lname; 
    } 
    public void setLname(String lname) { 
     this.lname = lname; 
    } 
    public int getSsn() { 
     return ssn; 
    } 
    public void setSsn(int ssn) { 
     this.ssn = ssn; 
    } 
    public String getDob() { 
     return dob; 
    } 
    public void setDob(String dob) { 
     this.dob = dob; 
    } 
    public String getAddress() { 
     return address; 
    } 
    public void setAddress(String address) { 
     this.address = address; 
    } 
    public String getCity() { 
     return city; 
    } 
    public void setCity(String city) { 
     this.city = city; 
    } 
    public String getState() { 
     return state; 
    } 
    public void setState(String state) { 
     this.state = state; 
    } 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 
    public String getPhoneNum() { 
     return phoneNum; 
    } 
    public void setPhoneNum(String phoneNum) { 
     this.phoneNum = phoneNum; 
    } 
} 

而且,即时通讯使用做所有的动作在Java文件

public class ManagePerson { 

    public static void main(String[] args) { 

     //AnnotationConfiguration config = new AnnotationConfiguration(); 
     //config.configure("/hibernate.cfg.xml"); 
     System.out.println("Hola"); 
     SessionFactory factory = new AnnotationConfiguration().configure("/hibernate.cfg.xml").buildSessionFactory(); 
     Session session = (Session) factory.getCurrentSession().beginTransaction(); 
     //Transaction tran = session.beginTransaction(); 
     try{ 
      PersonalInfo pi = new PersonalInfo(); 
      pi.setFname("Steve"); 
      pi.setLname("Rogers"); 
      pi.setSsn(368572734); 
      pi.setDob("10/12/1937"); 
      pi.setAddress("15 Captain America Rd."); 
      pi.setCity("Manhattan"); 
      pi.setState("New York"); 
      pi.setEmail("[email protected]"); 
      pi.setPassword("IamCaptAmerica1!"); 
      pi.setPhoneNum("7812649845"); 
      session.save(pi); 
      //tran.commit(); 
      System.out.println("Person Added"); 
      session.flush(); 
     }catch(HibernateException e){ 
      e.printStackTrace(); 
     } 
    } 
} 

即将出现的错误是

Exception in thread "main" java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:1080) 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:765) 
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83) 
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418) 
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) 
    at ManagePerson.main(ManagePerson.java:19) 

请告诉我我做错了什么或缺少什么。注释掉的行不会起作用。请帮助...谢谢。

+0

@CrisEspi'ManagePerson.main(ManagePerson.java: 19)'哪行代码在这里被提及? –

+0

SessionFactory factory = new AnnotationConfiguration()。configure(“/ hibernate.cfg.xml”)。buildSessionFactory(); –

+0

看起来你的依赖关系有一些版本不匹配。 –

回答

2

请添加在PersonalInfo类的成员属性的 'id' 和映射此id属性来分贝的唯一的列表PersonalInfo

@Id @GeneratedValue 
@Column(name = "id") 
private int id;