HHH-14276 test case for strange AnnotationException: MapsId in IdClass context

This commit is contained in:
info@kawoolutions.com 2020-10-21 22:51:15 +02:00 committed by Sanne Grinovero
parent ed3feeacad
commit 04ade27f07
5 changed files with 313 additions and 0 deletions

View File

@ -0,0 +1,53 @@
package org.hibernate.test.mapping.hhh14276;
import static org.hibernate.testing.transaction.TransactionUtil.doInJPA;
import java.util.Map;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.hql.spi.id.inline.InlineIdsOrClauseBulkIdStrategy;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.test.mapping.hhh14276.entity.PlayerStat;
import org.hibernate.test.mapping.hhh14276.entity.Score;
import org.hibernate.testing.TestForIssue;
import org.junit.Before;
import org.junit.Test;
/**
* This template demonstrates how to develop a test case for Hibernate ORM, using the Java Persistence API.
*/
@TestForIssue( jiraKey = "HHH-14276" )
public class NestedIdClassDerivedIdentifiersTest extends BaseEntityManagerFunctionalTestCase
{
@Override
protected Class<?>[] getAnnotatedClasses()
{
return new Class<?>[] { PlayerStat.class,
Score.class };
}
@Override
protected void addConfigOptions( Map options )
{
options.put( AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS, Boolean.TRUE );
options.put( AvailableSettings.HQL_BULK_ID_STRATEGY, InlineIdsOrClauseBulkIdStrategy.class.getName() );
}
@Before
public void setUp()
{
doInJPA( this::entityManagerFactory, em ->
{
// do nothing
} );
}
@Test
public void testNestedIdClassDerivedIdentifiers() throws Exception
{
doInJPA( this::entityManagerFactory, em ->
{
// do nothing
});
}
}

View File

@ -0,0 +1,89 @@
package org.hibernate.test.mapping.hhh14276.entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "\"PlayerStats\"")
@IdClass(PlayerStatId.class)
public class PlayerStat implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "player_id")
private Integer playerId;
@Basic(optional = false)
@Column(name = "jersey_nbr")
private Integer jerseyNbr;
@Id
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "game_id", referencedColumnName = "game_id")
@JoinColumn(name = "is_home", referencedColumnName = "is_home")
private Score score;
public PlayerStat()
{
}
public Integer getGameId()
{
return score.getGameId();
}
public void setGameId(Integer gameId)
{
score.setGameId(gameId);
}
public Boolean getHome()
{
return score.getHome();
}
public void setHome(Boolean home)
{
score.setHome(home);
}
public Integer getPlayerId()
{
return playerId;
}
public void setPlayerId(Integer playerId)
{
this.playerId = playerId;
}
public Integer getJerseyNbr()
{
return jerseyNbr;
}
public void setJerseyNbr(Integer jerseyNbr)
{
this.jerseyNbr = jerseyNbr;
}
public Score getScore()
{
return score;
}
public void setScore(Score score)
{
this.score = score;
}
}

View File

@ -0,0 +1,57 @@
package org.hibernate.test.mapping.hhh14276.entity;
import java.io.Serializable;
public class PlayerStatId implements Serializable
{
private static final long serialVersionUID = 1L;
private Integer playerId;
// nested composite PK @IdClass: named like relationship in entity class
private ScoreId score;
public PlayerStatId()
{
}
public Integer getGameId()
{
return score.getGameId();
}
public void setGameId(Integer gameId)
{
score.setGameId(gameId);
}
public Boolean getHome()
{
return score.getHome();
}
public void setHome(Boolean home)
{
score.setHome(home);
}
public Integer getPlayerId()
{
return playerId;
}
public void setPlayerId(Integer playerId)
{
this.playerId = playerId;
}
public ScoreId getScoreId()
{
return score;
}
public void setScoreId(ScoreId scoreId)
{
this.score = scoreId;
}
}

View File

@ -0,0 +1,78 @@
package org.hibernate.test.mapping.hhh14276.entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
@Entity
@Table(name = "\"Scores\"")
@IdClass(ScoreId.class)
public class Score implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "game_id")
private Integer gameId;
@Id
@Column(name = "is_home")
private Boolean home;
@Basic(optional = false)
@Column(name = "roster_id")
private Integer rosterId;
@Basic
@Column(name = "final_score")
private Integer finalScore;
public Score()
{
}
public Integer getGameId()
{
return gameId;
}
public void setGameId(Integer gameId)
{
this.gameId = gameId;
}
public Boolean getHome()
{
return home;
}
public void setHome(Boolean home)
{
this.home = home;
}
public Integer getRosterId()
{
return rosterId;
}
public void setRosterId(Integer rosterId)
{
this.rosterId = rosterId;
}
public Integer getFinalScore()
{
return finalScore;
}
public void setFinalScore(Integer finalScore)
{
this.finalScore = finalScore;
}
}

View File

@ -0,0 +1,36 @@
package org.hibernate.test.mapping.hhh14276.entity;
import java.io.Serializable;
public class ScoreId implements Serializable
{
private static final long serialVersionUID = 1L;
private Integer gameId;
private Boolean home;
public ScoreId()
{
}
public Integer getGameId()
{
return gameId;
}
public void setGameId(Integer gameId)
{
this.gameId = gameId;
}
public Boolean getHome()
{
return home;
}
public void setHome(Boolean home)
{
this.home = home;
}
}