mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#1834 - DDL for ElementCollection that is referenced multiple times includes foreign key constraint
This commit is contained in:
@@ -15,6 +15,51 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class ModelContainerTest {
|
||||
|
||||
@Test
|
||||
public void elementCollectionTable_single_expect_foreignKeys() {
|
||||
|
||||
ModelContainer container = new ModelContainer();
|
||||
|
||||
container.addTableElementCollection(createElementCollectionTable("ec_bean.id", "fk_ec_bean_ec_table"));
|
||||
|
||||
final MTable ecTable = container.getTable("ec_table");
|
||||
final MColumn fkCol = ecTable.getColumn("fk_col");
|
||||
assertThat(fkCol.getReferences()).isEqualTo("ec_bean.id");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void elementCollectionTable_reused_expect_noForeignKeys() {
|
||||
|
||||
ModelContainer container = new ModelContainer();
|
||||
|
||||
container.addTableElementCollection(createElementCollectionTable("ec_bean.id", "fk_ec_bean_ec_table"));
|
||||
container.addTableElementCollection(createElementCollectionTable("ec_otherBean.id", "fk_ec_otherBean_ec_table"));
|
||||
|
||||
final MTable ecTable = container.getTable("ec_table");
|
||||
final MColumn fkCol = ecTable.getColumn("fk_col");
|
||||
assertThat(fkCol.getReferences()).isNull();
|
||||
assertThat(fkCol.getForeignKeyName()).isNull();
|
||||
|
||||
final MIndex index = container.getIndex("ix_ec_table");
|
||||
assertThat(index.getTableName()).isEqualTo("ec_table");
|
||||
assertThat(index.getColumns()).containsOnly("fk_col");
|
||||
}
|
||||
|
||||
private MTable createElementCollectionTable(String references, String fkName) {
|
||||
|
||||
MTable ecTable = new MTable("ec_table");
|
||||
final MColumn colFk = new MColumn("fk_col", "varchar", true);
|
||||
colFk.setReferences(references);
|
||||
colFk.setForeignKeyName(fkName);
|
||||
colFk.setForeignKeyIndex("ix_ec_table");
|
||||
|
||||
ecTable.addColumn(colFk);
|
||||
ecTable.addColumn(new MColumn("key", "varchar", true));
|
||||
ecTable.addColumn(new MColumn("val", "varchar", true));
|
||||
|
||||
return ecTable;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void apply_when_noPendingDrops_then_emptyPending() {
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
package org.tests.model.elementcollection;
|
||||
|
||||
import javax.persistence.CollectionTable;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.Version;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
public class EcsmOne {
|
||||
|
||||
@Id
|
||||
UUID oneId;
|
||||
|
||||
String name;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "ecsm_values", joinColumns = @JoinColumn(name = "host_id", referencedColumnName = "one_id"))
|
||||
Set<String> values = new LinkedHashSet<>();
|
||||
|
||||
@Version
|
||||
long version;
|
||||
|
||||
public EcsmOne(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "id:" + oneId + " name:" + name + " values:" + values;
|
||||
}
|
||||
|
||||
public UUID getOneId() {
|
||||
return oneId;
|
||||
}
|
||||
|
||||
public void setOneId(UUID oneId) {
|
||||
this.oneId = oneId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(long version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public Set<String> getValues() {
|
||||
return values;
|
||||
}
|
||||
|
||||
public void setValues(Set<String> values) {
|
||||
this.values = values;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package org.tests.model.elementcollection;
|
||||
|
||||
import javax.persistence.CollectionTable;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.Version;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
public class EcsmTwo {
|
||||
|
||||
@Id
|
||||
UUID id;
|
||||
|
||||
String name;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "ecsm_values", joinColumns = @JoinColumn(name = "host_id", referencedColumnName = "id"))
|
||||
Set<String> values = new LinkedHashSet<>();
|
||||
|
||||
@Version
|
||||
long version;
|
||||
|
||||
public EcsmTwo(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "id:" + id + " name:" + name + " values:" + values;
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(long version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public Set<String> getValues() {
|
||||
return values;
|
||||
}
|
||||
|
||||
public void setValues(Set<String> values) {
|
||||
this.values = values;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package org.tests.model.elementcollection;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.DB;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class TestElementCollectionResused extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void insert_find_delete() {
|
||||
|
||||
EcsmOne one = new EcsmOne("One028");
|
||||
one.getValues().add("128-1");
|
||||
one.getValues().add("128-2");
|
||||
|
||||
EcsmTwo two = new EcsmTwo("Two028");
|
||||
two.getValues().add("228-1");
|
||||
two.getValues().add("228-2");
|
||||
|
||||
DB.save(one);
|
||||
DB.save(two);
|
||||
|
||||
final EcsmOne foundOne = DB.find(EcsmOne.class, one.getOneId());
|
||||
assertThat(foundOne.getName()).isEqualTo("One028");
|
||||
assertThat(foundOne.getValues()).contains("128-1", "128-2");
|
||||
|
||||
final EcsmTwo foundTwo = DB.find(EcsmTwo.class, two.getId());
|
||||
assertThat(foundTwo.getName()).isEqualTo("Two028");
|
||||
assertThat(foundTwo.getValues()).contains("228-1", "228-2");
|
||||
|
||||
DB.delete(foundOne);
|
||||
DB.delete(foundTwo);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user