Entity Session bean - Transfer data to a table and use the created identifier to save another table

I am new to JPA and I learned a lot from this forum. I have this problem.

I have 2 tables (Members and Member_next_of_kin). memberId is an automatic incremental column in the member table.

Member_next_of_kin has a columnId reference element from tabke members, which is required

I have this method to create a new member.

public void addMember(Members member) {
    try {          
        createNewMember(member);
        nok.setMemberId(getMemberId());
        addNextOfKin(nok);
    } catch (Exception e) {
        context.setRollbackOnly();
    }
}

public Members createNewMember(Members member) {
    memberFacade.create(member);
    return memberId;
}

My goal is to save the created element and return the created memberId back and use it to insert into the nextofkin table.

please show me how to do this as part of the transaction. Memberid returns null.

+4
source share
1 answer

JPA - @OneToMany .

JPA - - , OO. , :

@Entity
public class Member {
@Id
@GeneratedValue
private Long id;

@OneToMany(mappedBy="member")
private Set<NextOfKin> kindred;
}

@Entity
public class NextOfKin {
    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne
    private Member member;
    }

- JPA, , JPA.

, , - "--/--" JPA. SQL NextOfKin Member. . . JPA - , ( ) . JPA, " ", - - NextOfKin. mappedBy @OneToMany . :

, , NextOfKins. .

Member newMember = new Member();
NextOfKin nok = new NextOfKin();
createNewMember(newMember);//here something like em.persist() should happen
//after the save, the member.getId() will return a generated Long identifier 
//because we annotated the id attribute with @GeneratedValue
//NextOfkin is the owner, therefore we need a correct in 
memory relationship    from its point of view 
nok.setMember(newMember);
createNewNok(nok);//again persist the entity
//end of transaction

- NextOfKin FK, Member. , Java . , , .

Member fromDB = entityManager.find(Member.class, newMember.getId());
assertTrue("Member should have exactly one next of kin now", 
    fromDB.getKindred().size() == 1);
//and also from the other side
NextOfKin nokFromDB = entityManager.find(NextOfKin.class, nok.getId());
assertTrue("next of kin should have a member", 
    nokFromDB.getMember().getId() == newMember.getId())

, , Cascade , , , :

//...in Member
@OneToMany(cascade=CascadeType.ALL, mappedBy="member")
//... saving member will now save NextOfKin as well,
//but remember, we have to set the correct information in memory
// from the point of view of the owner
Member newMember = new Member();
NextOfKin nok = new NextOfKin();
nok.setMember(newMember);
createNewMember(newMember);

- - NextOfkin Member. Member.

JPA/ , SO, . JPA OneToMany/ManyToOne, " " ?

JPA ORM - , . , , , JPA, - , , , / .

, .
:

, . , JPA , Java DB, jOOQ mybatis.

+2

Source: https://habr.com/ru/post/1613911/


All Articles