2015-11-26 2 views
2

Я пытаюсь создать две таблицы join ConceptModelDetails и инструкции с использованием внешнего ключа. Ниже приведены мои классы моделей:Отображение от одного до многих с использованием Hibernate и Spring

ConceptModelDetails:

package com.assignment.model; 

@Entity 
@Table(name="conceptModelDetails") 
public class ConceptModelDetails { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    private int instructionsId; 
    private String operationType; 
    private String conceptModelID; 
    private String requestor; 
    private String status; 
    private Timestamp requestDateTime; 
    private Timestamp lastExecutedDateTime; 
    private Timestamp completedDateTime; 
    @OneToMany(cascade=CascadeType.ALL, mappedBy="conceptModelDetails") 
    private Set<Instructions> instructions; 

    public ConceptModelDetails() {}  
} 

и Instuctions:

package com.assignment.model; 

@Entity 
@Table(name="instructions") 
public class Instructions { 
    @Id 
    @GeneratedValue 
    private int Sno; 
    private String instruction; 
    @ManyToOne 
    @JoinColumn(name="instructionsId") 
    private ConceptModelDetails conceptModelDetails; 
} 

Ниже приводится applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.1.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

     <property name="driverClassName" value="org.postgresql.Driver" /> 
     <property name="url" value="jdbc:postgresql://192.168.1.79:5432/test" /> 
     <property name="username" value="postgres" /> 
     <property name="password" value="admin" /> 
    </bean> 
    <bean id="objDAO" class="com.assignment.dao.impl.ConceptModelDAOImpl"> 
     <property name="sessionFactory" ref="sessionfactory" /> 

    </bean> 
    <bean id="sessionfactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="packagesToScan" value="com.assignment.model"></property> 
     <property name="annotatedClasses"> 
      <list> 
       <value>com.assignment.model.ConceptModelDetails</value> 
       <value>com.assignment.model.Instructions</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.cache.use_second_level_cache">false</prop> 
      </props> 
     </property> 

    </bean> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionfactory" /> 
    </bean> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 

</beans> 

и контроллер:

@RequestMapping(value = "/myCntrl", method = RequestMethod.POST) 
    public String handler(HttpServletRequest request) { 
     System.out.println("handler"); 
     // System.out.println(request.getParameter("conceptID")); 
     // System.out.println(request.getParameter("operationType")); 
     String[] operations = request.getParameterValues("operations"); 
     Date date = new Date(); 
     Timestamp time = new Timestamp(date.getTime()); 
     ConceptModelDetails conceptModelDetails = new ConceptModelDetails(); 
     conceptModelDetails 
       .setConceptModelID(request.getParameter("conceptID")); 
     conceptModelDetails.setOperationType(request 
       .getParameter("operationType")); 
     conceptModelDetails.setRequestor(request.getParameter("requestor")); 
     conceptModelDetails.setRequestDateTime(time); 
     ApplicationContext context = new ClassPathXmlApplicationContext(
       "applicationContext.xml"); 
     System.out.println("yo"); 
     ConceptModelDAO obj = (ConceptModelDAO)context.getBean("objDAO"); 
     System.out.println("no"); 
     Instructions instructions = new Instructions(); 
     for(int i = 0; i < operations.length; i++){ 
     instructions.setInstruction(operations[i]); 
     obj.addInstructions(instructions); 
     } 
     obj.add(conceptModelDetails);   


     return "success"; 

    } 

Проблемы при запуске этого кода являются:

  1. же hibernate_sequence используется для обеих таблиц.

  2. Внешний ключ не отображается в таблице инструкций, как показано на следующем снимке экрана.

Tables

Пожалуйста, руководство, что не так с кодом. Я новичок в спячке и весне, поэтому я хотел бы получить подробное объяснение. Заранее спасибо.

+0

Не могли бы вы сообщить об ошибке, которую вы получаете. –

ответ

0

1) Вы используете генератор глобальной последовательности, который спящий режим предоставляет по умолчанию, если генератор не предусмотрен, как указано в спецификации JPA.

Измените его следующим образом. Сделайте это для обоих классов с разными последовательностями для каждого класса.

@Entity 
@SequenceGenerator(name="PRIVATE_SEQ", sequenceName="private_sequence") 
public class ConceptModelDetails { 
    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="PRIVATE_SEQ") 
    private int instructionsId; 

2) Здесь Instructions класса имеет отношение и поэтому вы должны установить ConceptModelDetails объект в Instructions объекта перед сохранением Instructions объекта.

ConceptModelDetails cmd1 = new ConceptModelDetails(); 

Instructions i = new Instructions() 
i.setConceptModelDetails(cmd1); 
.... 

Затем сохраните Instructions объект i

Надеется, что это помогает.

+0

Большое спасибо! Обе проблемы решены. Очень ценю вашу помощь. :) –

+0

@ManojSuthar: Рад, что вы это решили. :) –

Смежные вопросы