Skip to content

Commit

Permalink
HHH-14257 Add test for issue
Browse files Browse the repository at this point in the history
  • Loading branch information
dreab8 authored and Sanne committed Nov 16, 2020
1 parent 00b3ccb commit 2896372
Showing 1 changed file with 171 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.collection.map;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;

import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Before;
import org.junit.Test;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.hamcrest.MatcherAssert.assertThat;

/**
* @author Andrea Boriero
*/
public class EmbeddableIndexTest extends BaseCoreFunctionalTestCase {

@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] { TheOne.class, TheMany.class };
}

@Before
public void setUp() {
inTransaction(
session -> {
TheOne one = new TheOne( "1" );
session.save( one );

TheMapKey theMapKey = new TheMapKey( one );
TheMany theMany = new TheMany( theMapKey );
session.save( theMany );

Map<TheMapKey, TheMany> map = new HashMap<>();
map.put( theMapKey, theMany );
one.setTheManys( map );
}
);
}

@Test
public void testIt() {
inSession(
session -> {
TheOne one = session.get( TheOne.class, "1" );
TheMapKey theMapKey = one.getTheManys().keySet().iterator().next();
assertThat( theMapKey, is( notNullValue() ) );
assertThat( theMapKey.getTheOne(), sameInstance( one ) );
}
);


}

@Entity(name = "TheOne")
public static class TheOne {
private String id;
private String aString;
private Map<TheMapKey, TheMany> theManys = new HashMap<>();

TheOne() {
}

public TheOne(String id) {
this.id = id;
}

@Id
public String getId() {
return this.id;
}

public void setId(String id) {
this.id = id;
}

@OneToMany(mappedBy = "theMapKey.theOne")
@MapKey(name = "theMapKey")
public Map<TheMapKey, TheMany> getTheManys() {
return theManys;
}

public void setTheManys(Map<TheMapKey, TheMany> theManys) {
this.theManys = theManys;
}

public String getaString() {
return aString;
}

public void setaString(String aString) {
this.aString = aString;
}
}

@Embeddable
public static class TheMapKey implements Serializable {
private TheOne theOne;
private int anInt;

TheMapKey() {
}

public TheMapKey(TheOne theOne) {
this.theOne = theOne;
}

@ManyToOne
public TheOne getTheOne() {
return theOne;
}

public void setTheOne(TheOne theOne) {
this.theOne = theOne;
}

public int getAnInt() {
return anInt;
}

public void setAnInt(int anInt) {
this.anInt = anInt;
}
}

@Entity(name = "TheMany")
public static class TheMany {
private TheMapKey theMapKey;
private String aString;

TheMany() {
}

public TheMany(TheMapKey theMapKey) {
this.theMapKey = theMapKey;
}

@EmbeddedId
public TheMapKey getTheMapKey() {
return theMapKey;
}

public void setTheMapKey(TheMapKey theMapKey) {
this.theMapKey = theMapKey;
}

public String getaString() {
return aString;
}

public void setaString(String aString) {
this.aString = aString;
}
}
}

0 comments on commit 2896372

Please sign in to comment.