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 274119
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T00:33:40+00:00 2026-05-12T00:33:40+00:00

I have a one way @OneToMany relationship between a Team and Player class. I

  • 0

I have a one way @OneToMany relationship between a Team and Player class. I would like to save a Team object among your Players. Player’s identifier IS COMPOUND by Team foreign key and list index as follows. I have a mapping like this one because i need to save Team and your Players ate the same time.

@Entity
public class Team {

    @Id
    @GeneratedValue
    private Integer id;

    @CollectionOfElements
    @JoinTable(
        name="PLAYER",
        joinColumns=@JoinColumn(name="TEAM_ID"))
    @IndexColumn(name="PLAYER_INDEX")
    private List<Player> playerList = new ArrayList<Player>();

}

@Embeddable
public class Player {

   // Player's getter's and setter's

}

So if i use the following

Team team = new Team();

team.getPlayerList().add(new Player());
team.getPlayerList().add(new Player());

session.save(team); // It works!

It happens whether you use @CollectionsOfElements, Player class need a @Embeddable annotation, not a @Entity. JPA does not allows @Entity and @Embeddable at the same time. Player is also a @Entity – it has relationship with other entities.

Has someone an idea about i could save a Team and a Player (ONE WAY RELATIONSHIP) by using CascadeType.PERSIST with @Entity in the Player class instead of @Embeddable ?

Remember that COMPOUND primary key needs to be assigned before saving but Team’s identifier and PlayerList index position could play the role of Player’s compound primary key

regards,

  • 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-12T00:33:41+00:00Added an answer on May 12, 2026 at 12:33 am

    The below solution shows a composite key for Player that consists of Team and the position in the list of players in that team. Saves cascade from team to players.

    Team.java

    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Version;
    
    import org.apache.commons.lang.builder.ToStringBuilder;
    import org.apache.commons.lang.builder.ToStringStyle;
    import org.hibernate.annotations.IndexColumn;
    
    @Entity
    public class Team implements Serializable {
    
        @Id @GeneratedValue private Long id;
    
        @Version private int version;
    
        @OneToMany(cascade=CascadeType.ALL, mappedBy="id.team")
        @IndexColumn(name="PLAYER_IDX")
        private List<Player> players = new ArrayList<Player>();
    
        private String name;
    
        protected Team() {}
    
        public Team(String name) {
            this.name = name;
        }
    
        public boolean addPlayer(Player player) {
            boolean result = players.add(player);
            if (result) {
                player.setPlayerId(new PlayerId(this, players.size() - 1));
            }
            return result;
        }
    
        public List<Player> getPlayers() {
            return players;
        }
    
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("name", name).append("players", players).toString();
        }
    }
    

    Player.java

    import java.io.Serializable;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Version;
    
    import org.apache.commons.lang.builder.ToStringBuilder;
    import org.apache.commons.lang.builder.ToStringStyle;
    
    @Entity
    public class Player implements Serializable {
    
        @Id private PlayerId id;
    
        @Version private int version;
    
        void setPlayerId(PlayerId id) {
            this.id = id;
        }
    
        @Override
        public String toString() {
            return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("number", id.getNumber()).toString();
        }
    
    }
    

    PlayerId.java

    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Embeddable;
    import javax.persistence.ManyToOne;
    
    import org.apache.commons.lang.builder.HashCodeBuilder;
    
    @Embeddable
    public class PlayerId implements Serializable {
    
        @ManyToOne
        private Team team;
    
        @Column(name="PLAYER_IDX", insertable=false, updatable=false)
        private int number;
    
        protected PlayerId() {}
    
        PlayerId(Team team, int number) {
            this.team = team;
            this.number = number;
        }
    
        public int getNumber() {
            return number;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            } else if (obj == this) {
                return true;
            } if (obj instanceof PlayerId) {
                PlayerId other = (PlayerId) obj;
                return other.team.equals(this.team) && other.number == this.number; 
            }
            return false;
        }
    
        @Override
        public int hashCode() {
            return new HashCodeBuilder().append(team).append(number).toHashCode();
        }
    
    }
    

    This test below:

    public void testPersistTeamAndPlayers() throws Exception {
        Team team = new Team("My Team");
        team.addPlayer(new Player());
        team.addPlayer(new Player());
    
        AnnotationConfiguration configuration = new AnnotationConfiguration();
        configuration.addAnnotatedClass(Team.class);
        configuration.addAnnotatedClass(Player.class);
        configuration.configure();
    
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        Session session;
        session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.save(team);
        transaction.commit();
        session.close();
    
        session = sessionFactory.openSession();
        @SuppressWarnings("unchecked") List<Team> list = session.createCriteria(Team.class).list();
        assertEquals(1, list.size());
    
        Team persisted = list.get(0);
        System.out.println(persisted);
    

    gives the following log output:

    12:37:17,796 DEBUG [SchemaExport, SchemaExport.execute] 
        create table Player (
            PLAYER_IDX integer not null,
            version integer not null,
            team_id bigint,
            primary key (PLAYER_IDX, team_id)
        )
    12:37:17,796 DEBUG [SchemaExport, SchemaExport.execute] 
        create table Team (
            id bigint generated by default as identity (start with 1),
            name varchar(255),
            version integer not null,
            primary key (id)
        )
    12:37:17,796 DEBUG [SchemaExport, SchemaExport.execute] 
        alter table Player 
            add constraint FK8EA38701AA5DECBA 
            foreign key (team_id) 
            references Team
    12:37:17,812 INFO  [SchemaExport, SchemaExport.importScript] Executing import script: /import.sql
    12:37:17,812 INFO  [SchemaExport, SchemaExport.execute] schema export complete
    12:37:17,859 DEBUG [SQL, SQLStatementLogger.logStatement] 
        insert 
        into
            Team
            (id, name, version) 
        values
            (null, ?, ?)
    12:37:17,875 DEBUG [SQL, SQLStatementLogger.logStatement] 
        call identity()
    12:37:17,875 DEBUG [SQL, SQLStatementLogger.logStatement] 
        select
            player_.PLAYER_IDX,
            player_.team_id,
            player_.version as version1_ 
        from
            Player player_ 
        where
            player_.PLAYER_IDX=? 
            and player_.team_id=?
    12:37:17,890 DEBUG [SQL, SQLStatementLogger.logStatement] 
        select
            player_.PLAYER_IDX,
            player_.team_id,
            player_.version as version1_ 
        from
            Player player_ 
        where
            player_.PLAYER_IDX=? 
            and player_.team_id=?
    12:37:17,890 DEBUG [SQL, SQLStatementLogger.logStatement] 
        insert 
        into
            Player
            (version, PLAYER_IDX, team_id) 
        values
            (?, ?, ?)
    12:37:17,890 DEBUG [SQL, SQLStatementLogger.logStatement] 
        insert 
        into
            Player
            (version, PLAYER_IDX, team_id) 
        values
            (?, ?, ?)
    12:37:17,906 DEBUG [SQL, SQLStatementLogger.logStatement] 
        select
            this_.id as id0_0_,
            this_.name as name0_0_,
            this_.version as version0_0_ 
        from
            Team this_
    12:37:17,937 DEBUG [SQL, SQLStatementLogger.logStatement] 
        select
            players0_.team_id as team3_1_,
            players0_.PLAYER_IDX as PLAYER1_1_,
            players0_.PLAYER_IDX as PLAYER1_1_0_,
            players0_.team_id as team3_1_0_,
            players0_.version as version1_0_ 
        from
            Player players0_ 
        where
            players0_.team_id=?
    Team[name=My Team,players=[Player[number=0], Player[number=1]]]
    

    The last line shows the toString for Team and Player, which shows how the numbers are assigned (the index of the list). Other entities can refer the Player (by team_id and player_idx).

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a oneToMany relationship between Post and PostVote. I would like to be
I have an Class with a unidirectional one to many relationship as follows: public
I have a 2 entities in a One-To-Many relationship: OfficeView.java: public class OfficeView implements
I have the situation where I have a class A having a OneToMany relationship
Background This question is in two parts. I have a one-way WCF operation hosted
I have a fairly straightforward WCF service that performs one-way file synchronization for a
Given that I only have one monitor, what's the best way to debug a
I just learned (the hard way) that Java Component s can only have one
Is there any way to have this: [one[two]][three] And extract this with a regex?
Is there a way in Python, to have more than one constructor or more

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.