HHH-11881 : Added tests
This commit is contained in:
parent
1afbdadd67
commit
240492f940
|
@ -0,0 +1,172 @@
|
|||
/*
|
||||
* 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.bag;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.persistence.CollectionTable;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.OrderBy;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* @author Gail Badner
|
||||
*/
|
||||
public class BagElementNullBasicTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
@Override
|
||||
protected Class[] getAnnotatedClasses() {
|
||||
return new Class[] {
|
||||
AnEntity.class
|
||||
};
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPersistNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( null );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.add( null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNull() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( "def" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.set( 0, null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNullWithExtraValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( "def" );
|
||||
e.aCollection.add( "ghi" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 2, e.aCollection.size() );
|
||||
assertEquals( 2, getCollectionElementRows( e.id ).size() );
|
||||
e.aCollection.set( 0, null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( e.id ).size() );
|
||||
assertEquals( "ghi", e.aCollection.get( 0 ) );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private List getCollectionElementRows(int id) {
|
||||
return doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
return session.createNativeQuery(
|
||||
"SELECT aCollection FROM AnEntity_aCollection where AnEntity_id = " + id
|
||||
).list();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity
|
||||
@Table(name="AnEntity")
|
||||
public static class AnEntity {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private int id;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "AnEntity_aCollection", joinColumns = { @JoinColumn( name = "AnEntity_id" ) })
|
||||
@OrderBy
|
||||
private List<String> aCollection = new ArrayList<String>();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
* 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.idbag;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.persistence.CollectionTable;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.annotations.CollectionId;
|
||||
import org.hibernate.annotations.GenericGenerator;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* @author Gail Badner
|
||||
*/
|
||||
public class IdBagElementNullBasicTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
@Override
|
||||
protected Class[] getAnnotatedClasses() {
|
||||
return new Class[] {
|
||||
AnEntity.class
|
||||
};
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPersistNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( null );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.add( null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNull() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( "def" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.set( 0, null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNullWithExtraValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( "def" );
|
||||
e.aCollection.add( "ghi" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 2, e.aCollection.size() );
|
||||
assertEquals( 2, getCollectionElementRows( e.id ).size() );
|
||||
if ( "def".equals( e.aCollection.get( 0 ) ) ) {
|
||||
e.aCollection.set( 0, null );
|
||||
}
|
||||
else {
|
||||
e.aCollection.set( 1, null );
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( e.id ).size() );
|
||||
assertEquals( "ghi", e.aCollection.get( 0 ) );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private List getCollectionElementRows(int id) {
|
||||
return doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
return session.createNativeQuery(
|
||||
"SELECT aCollection FROM AnEntity_aCollection where AnEntity_id = " + id
|
||||
).list();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity
|
||||
@Table(name="AnEntity")
|
||||
@GenericGenerator(name="increment", strategy = "increment")
|
||||
public static class AnEntity {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private int id;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "AnEntity_aCollection", joinColumns = { @JoinColumn( name = "AnEntity_id" ) })
|
||||
@CollectionId(
|
||||
columns = { @Column },
|
||||
type = @Type(type = "long"),
|
||||
generator = "increment"
|
||||
)
|
||||
private List<String> aCollection = new ArrayList<String>();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,182 @@
|
|||
/*
|
||||
* 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.list;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.persistence.CollectionTable;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.OrderColumn;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* @author Gail Badner
|
||||
*/
|
||||
public class ListElementNullBasicTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
@Override
|
||||
protected Class[] getAnnotatedClasses() {
|
||||
return new Class[] {
|
||||
AnEntity.class
|
||||
};
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPersistNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( null );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.add( null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNull() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( "def" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.set( 0, null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNullToNonNull() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( "def" );
|
||||
e.aCollection.add( "ghi" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 2, e.aCollection.size() );
|
||||
assertEquals( 2, getCollectionElementRows( e.id ).size() );
|
||||
e.aCollection.set( 0, null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 2, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( e.id ).size() );
|
||||
e.aCollection.set( 0, "not null" );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 2, e.aCollection.size() );
|
||||
assertEquals( 2, getCollectionElementRows( e.id ).size() );
|
||||
assertEquals( "not null", e.aCollection.get( 0 ) );
|
||||
assertEquals( "ghi", e.aCollection.get( 1 ) );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private List getCollectionElementRows(int id) {
|
||||
return doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
return session.createNativeQuery(
|
||||
"SELECT aCollection FROM AnEntity_aCollection where AnEntity_id = " + id
|
||||
).list();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity
|
||||
@Table(name="AnEntity")
|
||||
public static class AnEntity {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private int id;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "AnEntity_aCollection", joinColumns = { @JoinColumn( name = "AnEntity_id" ) })
|
||||
@OrderColumn
|
||||
private List<String> aCollection = new ArrayList<String>();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,179 @@
|
|||
/*
|
||||
* 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.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.persistence.CollectionTable;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* @author Gail Badner
|
||||
*/
|
||||
public class MapElementNullBasicTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
@Override
|
||||
protected Class[] getAnnotatedClasses() {
|
||||
return new Class[] {
|
||||
AnEntity.class
|
||||
};
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPersistNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.put( "null", null );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.put( "null", null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNull() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.put( "abc", "def" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.put( "abc", null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNullToNonNull() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.put( "abc", "def" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.put( "abc", null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.put( "abc", "not null" );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( entityId ).size() );
|
||||
assertEquals( "not null", e.aCollection.get( "abc" ) );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private List<?> getCollectionElementRows(int id) {
|
||||
return doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
return session.createNativeQuery(
|
||||
"SELECT aCollection FROM AnEntity_aCollection where AnEntity_id = " + id
|
||||
).list();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity
|
||||
@Table(name="AnEntity")
|
||||
public static class AnEntity {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private int id;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "AnEntity_aCollection", joinColumns = { @JoinColumn( name = "AnEntity_id" ) })
|
||||
private Map<String, String> aCollection = new HashMap<String, String>();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* 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.set;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import javax.persistence.CollectionTable;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* @author Gail Badner
|
||||
*/
|
||||
@TestForIssue( jiraKey = "HHH-11881")
|
||||
public class SetElementNullBasicTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
@Override
|
||||
protected Class[] getAnnotatedClasses() {
|
||||
return new Class[] {
|
||||
AnEntity.class
|
||||
};
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPersistNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( null );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addNullValue() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.add( null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateNonNullValueToNull() {
|
||||
int entityId = doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = new AnEntity();
|
||||
e.aCollection.add( "def" );
|
||||
session.persist( e );
|
||||
return e.id;
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 1, e.aCollection.size() );
|
||||
assertEquals( 1, getCollectionElementRows( entityId ).size() );
|
||||
e.aCollection.remove( "def" );
|
||||
e.aCollection.add( null );
|
||||
}
|
||||
);
|
||||
|
||||
doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
AnEntity e = session.get( AnEntity.class, entityId );
|
||||
assertEquals( 0, e.aCollection.size() );
|
||||
assertEquals( 0, getCollectionElementRows( entityId ).size() );
|
||||
session.delete( e );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private List<?> getCollectionElementRows(int id) {
|
||||
return doInHibernate(
|
||||
this::sessionFactory, session -> {
|
||||
return session.createNativeQuery(
|
||||
"SELECT aCollection FROM AnEntity_aCollection where AnEntity_id = " + id
|
||||
).list();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity
|
||||
@Table(name="AnEntity")
|
||||
public static class AnEntity {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private int id;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "AnEntity_aCollection", joinColumns = { @JoinColumn( name = "AnEntity_id" ) })
|
||||
private Set<String> aCollection = new HashSet<>();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue