Hibernate - 更新Parent时更新子表

时间:2017-07-17 07:37:41

标签: hibernate

更新子表时,我在Hibernate中遇到问题 当重复记录到来时,父表记录会更新,但是新列会插入子表中,因为子表也需要更新而不是插入。使用session.saveOrUpdate(storeObject)

尝试了级联压脚,SaveOrUpdate,但问题未解决

    Sub parse_data()
    Dim lr As Long
    Dim ws As Worksheet
    Dim vcol, i As Integer
    Dim icol As Long
    Dim myarr As Variant
    Dim title As String
    Dim titlerow As Integer


    vcol = 3

    Set ws = Sheets("Sheet1")
    lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
    title = "A1:Z1"
    titlerow = ws.Range(title).Cells(1).Row
    icol = ws.Columns.Count
    ws.Cells(1, icol) = "Unique"

    For i = 2 To lr
        On Error Resume Next
        If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
            ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
        End If
    Next

    myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
        ws.Columns(icol).Clear

        For i = 2 To UBound(myarr)
            ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""

            If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then

                '===================================================================
                '~~Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
                Workbooks.Add
                ActiveWorkbook.Sheets.Add(0).Name = myarr(i) & ""
                '===================================================================

            Else
                Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
            End If

            '==========================================================================
            '~~ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
             '~~Sheets(myarr(i) & "").Columns.AutoFit
            ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy ActiveWorkbook.Sheets("Sheet1").Range("A1")
            'mainworkBook.Sheets(1).Range("T2:T1000").Formula = "=SUM(Q2:S2)"
            ActiveWorkbook.SaveAs "C:\Macros\Split_Files\" & myarr(i) & ".xlsx"
            '=========================================================================
            ActiveWorkbook.Close
        Next

        ws.AutoFilterMode = False
        ws.Activate
        Call ProtectAll
    End Sub


    Sub ProtectAll()
        Dim wBk As Workbook
        Dim sFileSpec As String
        Dim sPathSpec As String
        Dim sFoundFile As String
        Dim mainworkBook As Workbook
        Dim ws1 As Worksheet
        Dim LastRow As Long

        sPathSpec = "C:\Macros\Split_Files\"
        sFileSpec = "*.xlsx"

        sFoundFile = Dir(sPathSpec & sFileSpec)
        Do While sFoundFile <> ""
            Set wBk = Workbooks.Open(sPathSpec & sFoundFile)
            With wBk

                Set mainworkBook = wBk
                 'mainworkBook.Sheets(1).Unprotect passowrd = "abc"
                 Set ws1 = mainworkBook.Sheets(1)
                LastRow = ws1.Cells(ws1.Rows.Count, "U").End(xlUp).Row

                mainworkBook.Sheets(1).Range("U2:U" & LastRow).Formula = "=SUM(R2:T2)"




                'mainworkBook.Sheets(1).Range("A:Z").Locked = True
                'mainworkBook.Sheets(1).Range("A1:Z1").Locked = False
                'mainworkBook.Sheets(1).Range("Q:S").Locked = False
                'mainworkBook.Sheets(1).Range("U:U").Locked = False
                'mainworkBook.Sheets(1).Range("W:X").Locked = False

                mainworkBook.Worksheets("Sheet1").Cells.EntireColumn.AutoFit

                'mainworkBook.Sheets(1).Protect passowrd = "abc"

                'mainworkBook.Sheets(1).Protect passowrd:="abc", userinterfaceonly:=True
                'mainworkBook.Sheets(1).EnableOutlining = True
                'mainworkBook.Sheets(1).EnableAutoFilter = True
                'mainworkBook.Sheets(1).EnableSelection = xlUnlockedCells


                Worksheets(2).Visible = xlSheetHidden
                Worksheets(3).Visible = xlSheetHidden



                Application.DisplayAlerts = False
                wBk.SaveAs Filename:=.FullName
                Application.DisplayAlerts = True
            End With
            Set wBk = Nothing
            Workbooks(sFoundFile).Close False
            sFoundFile = Dir
        Loop

End Sub

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题。我搜索了很多,但是在父表中插入新数据时无法正确地更新子表中的数据。最后,我只是做了一个黑客来满足我的需要。通过映射的id获取子项并删除所有行并再次插入。我曾经在下面编写的一段代码。

for (Car car: garag.getCars()) {
    String hql4 = "delete from Car where garage.garageId=:id";
    Query<EventDetails> query4 = session.createQuery(hql4);
    query4.setParameter("id", garageid);
    query4.executeUpdate();
    }

试试这个。它可以帮到你。