2016-07-18 20 views
0

私は以下のハイバネートエンティティの問題に直面しています。 レコードを基本表に挿入するときに、外部キーは常に子表としてNULLに挿入されます。 お手数ですが、ここで記法を設定していますか?Hibernateの外部キーは常にNULLとして挿入されます

//PK 
    @Entity 
    @Table(name="s_c_bur_dtl") 
    public class SurveyConductBurglaryDetails { 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO,generator="surveycondbgdtl_seq") 
     @javax.persistence.SequenceGenerator(name="surveycondbgdtl_seq",sequenceName="surveycondbgdtl_seq",allocationSize=1,initialValue=1) 
     @Column(name = "nsurveycondbgdtlcd", unique=true, nullable = false, columnDefinition = "bigint") 
     private BigInteger surveyCondBgDtlCd; 


     @OneToMany(cascade = CascadeType.ALL,mappedBy="surveyConductBurglaryDetails") 
     private List<SurveyConductBurglaryProperty> surveyConductBurglaryProperties; 

    } 

    //FK 
    @Entity 
    @Table(name="s_c_bur_property") 
    public class SurveyConductBurglaryProperty { 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO,generator="surveycondbgproperty_seq") 
     @javax.persistence.SequenceGenerator(name="surveycondbgproperty_seq",sequenceName="surveycondbgproperty_seq",allocationSize=1,initialValue=1) 
     @Column(name = "nsurveycondbgpropertycd", unique=true, nullable = false, columnDefinition = "bigint") 
     private BigInteger surveyCondBgPropertyCd; 

     @ManyToOne 
     @JoinColumn(name = "nsurveycondbgdtlcd")   
     private SurveyConductBurglaryDetails surveyConductBurglaryDetails; 

    } 

@Service 
    class SaveService{ 
    @Autowired DbService dbService; 

    public void conductSurvey(SurveyConductBurglaryDetails surveyConductBurglaryDetails) throws IllegalAccessException, InvocationTargetException{ 

     dbService.saveOrUpdate(surveyConductBurglaryDetails); // call for save 

    } 
    } 

    @Service 
    class DbService{ 
    public void saveOrUpdate(Object insertObj){ 

      Session session = surveyTransactionManager.getSessionFactory().getCurrentSession(); 
      Transaction transaction = session.getTransaction(); 
      if(!transaction.isActive()){ 
       session.beginTransaction(); 
      } 

      try{ 
       session.saveOrUpdate(insertObj); 
       transaction.commit(); 

      }catch(Exception e){ 

       transaction.rollback(); 
       // TODO Auto-generated catch block 
       if(logger.isDebugEnabled()){ 
        logger.debug("SurveyDBService.saveOrUpdate Catch block"); 
       } 
       e.printStackTrace(); 
      }finally{ 

      } 


     } 

    } 

ありがとうございます!!!

+0

保存するエンタテインメントコードを追加してください。 –

+0

返信ありがとう、私は今も保存コードを共有しています。 –

+0

「nullとして挿入されました」とはどういう意味ですか?トランザクションが完了した後はnullですか?または、データベースに 'insert'されたときにはnullです(Hibernateはこれを行い、外部キーにヌル値を持つ行を挿入し、次に行に対して' update'を行います)。 – Tobb

答えて

0

完全なコードを入力する必要はありません。だから私は前提を作ることができます。 SurveyConductBurglaryDetailsSurveyConductBurglaryPropertyに設定しないでください。あなたのコードは次のようになります:

SurveyConductBurglaryDetails details = new SurveyConductBurglaryDetails(); 
details.setSurveyConductBurglaryProperties(
    new ArrayList<SurveyConductBurglaryProperty>()); 

SurveyConductBurglaryProperty property = new SurveyConductBurglaryProperty(); 
property.setSurveyConductBurglaryDetails(details); 

details.getSurveyConductBurglaryProperties().add(property); 

session.save(details); 
関連する問題