Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3609714
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T21:39:46+00:00 2026-05-18T21:39:46+00:00

I’ve got two tables: DOCUMENT ——– DOC_ID (PK) . . . SECTION ——- DOC_ID

  • 0

I’ve got two tables:

DOCUMENT
--------
DOC_ID (PK)
.
.
.

SECTION
-------
DOC_ID (FK, PK)
SECTION_NUM (PK)
.
.
.

Entries in the database might look like this:

Document:

DOC_ID | . . .
--------------
1      | . . .
2      | . . .

Section:

DOC_ID | SECTION_NUM | . . .
---------------------------
1      | 1           | . . .
1      | 2           | . . .
1      | 3           | . . .
2      | 1           | . . .

Document has a generated Id on DOC_ID, while Section has a composite primary key over DOC_ID and SECTION_NUM.

SECTION_NUM is a locally(application) generated sequence number starting fresh for every document.

My entity classes look as follows:

@Entity
@Table(name = "DOCUMENT")
public class Document implements java.io.Serializable {
    @Id
    @Column(name = "DOC_ID", nullable = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DocIdSeq")
    @SequenceGenerator(name = "DocIdSeq", sequenceName = "DOC_ID_SEQ", allocationSize = 1)
    private Long docId;
}


@Entity
@Table(name = "SECTION")
@IdClass(SectionId.class)
public class Section implements java.io.Serializable {
    @Id
    @Column(name = "DOC_ID", nullable = false)
    private Long docId;

    @Id
    @Column(name = "SECTION_NUM", nullable = false)
    private Integer sectionNum;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "DOC_ID")
    private Document document;
}

public class SectionId implements java.io.Serializable {
    private Long docId;
    private Integer sectionNum;
}

When inserting a new Document and related Section, I do the following:

Document doc = new Document();

Section section = new Section();
section.setDocument(doc);
section.setSectionNum(1);

entityManager.persist(doc);

When persisting I get an exception stating that NULL is not allowed for column SECTION_NUM.
I’m using OpenEJB (which relies on OpenJPA behind the scenes for unit testing), and found when stepping through OpenJPA code that it successfully persists the Document object, but when it comes to the Section object it creates a new instance reflectively and sets all fields to null, so losing the sectionNum value, before linking it to the Document object persisted earlier.

Unfortunately I can’t change the DB schema, as it’s a legacy system.
Has anybody done something similar and got it working?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T21:39:46+00:00Added an answer on May 18, 2026 at 9:39 pm

    I’ve been meaning to update this for some time, but been too busy…

    Ok, so it turns out this isn’t really possible with JPA.
    However, there is a workaround.

    Previously I mentioned that the Document class looks like this.

    @Entity
    @Table(name = "DOCUMENT")
    public class Document implements java.io.Serializable {
        @Id
        @Column(name = "DOC_ID", nullable = false)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
        "DocIdSeq")
        @SequenceGenerator(name = "DocIdSeq", sequenceName = "DOC_ID_SEQ", allocationSize = 1)
        private Long docId;
    }
    

    That was just a shortened version to clarify the issue.
    The real class has a collection of Sections too:

    @Entity
    @Table(name = "DOCUMENT")
    public class Document implements java.io.Serializable {
        @Id
        @Column(name = "DOC_ID", nullable = false)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
    "DocIdSeq")
        @SequenceGenerator(name = "DocIdSeq", sequenceName = "DOC_ID_SEQ", allocationSize = 1)
        private Long docId;
    
        @OneToMany
        private Set<Section> sections = new HashSet<Section>(0);
    }
    

    If Section had a simple primary key, JPA would easily handle the relationship, as it would accept an id from the application, or generate it from a sequence, but it won’t do both with one id.

    So, the solution is to manage the relationship yourself, and add a lifecycle function:

    @Entity
    @Table(name = "DOCUMENT")
    public class Document implements java.io.Serializable {
        @Id
        @Column(name = "DOC_ID", nullable = false)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
        "DocIdSeq")
        @SequenceGenerator(name = "DocIdSeq", sequenceName = "DOC_ID_SEQ", allocationSize = 1)
        private Long docId;
    
        @Transient
        private Set<Section> sections = new HashSet<Section>(0);
    
        @PostPersist
        public void updateChildIds() {
            for (Section section : this.sections) {
                section.getId().setDocId(this.docId);
            }
        }
    }
    

    As you can see, the Section relationship is now Transient, meaning JPA won’t manage it.
    After persisting a Document, the framework will call the updateChildIds function, where you manually update the Section id’s with the newly persisted Document id’s.

    This could be demonstrated in the following facade:

    @Stateless
    public void DocumentFacade implements DocumentFacadeLocal {
    
        @PersistenceContext
        private EntityManager entityManager;
    
        public void save(Document entity) throws Exception {
            this.entityManager.persist(entity);
            this.entityManager.flush();
            this.persistTransientEntities(entity);
            this.entityManager.flush();
        }
    
        private void persistTransientEntities(CaseInstructionSheet entity) {
           for (Section section : entity.getSections()) {
                this.entityManager.persist(section);
            }
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I've got a string that has curly quotes in it. I'd like to replace
i got an object with contents of html markup in it, for example: string
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I'm trying to decode HTML entries from here NYTimes.com and I cannot figure out
I'm parsing an RSS feed that has an &#8217; in it. SimpleXML turns this
I have some data like this: 1 2 3 4 5 9 2 6
I have just tried to save a simple *.rtf file with some websites and
I want to count how many characters a certain string has in PHP, but
I have a JSP page retrieving data and when single or double quotes are
Seemingly simple, but I cannot find anything relevant on the web. What is the

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.