mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#614 - 'Matches for the concatenated key columns where not found' - tests
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
package com.avaje.tests.model.bridge;
|
||||
|
||||
/**
|
||||
* Simple enum for our bridge table tests.
|
||||
*/
|
||||
public enum BAccessLevel {
|
||||
ONE,
|
||||
TWO,
|
||||
THREE
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.avaje.tests.model.bridge;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
public class BSite {
|
||||
|
||||
@Id
|
||||
UUID id;
|
||||
|
||||
String name;
|
||||
|
||||
public BSite(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.avaje.tests.model.bridge;
|
||||
|
||||
import javax.persistence.Embeddable;
|
||||
import javax.persistence.EmbeddedId;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.ManyToOne;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
public class BSiteUser {
|
||||
|
||||
@Embeddable
|
||||
public static class Id {
|
||||
|
||||
// Use siteId, userId matching by db column naming convention
|
||||
public UUID siteId;
|
||||
public UUID userId;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
Id id = (Id) o;
|
||||
if (!siteId.equals(id.siteId)) return false;
|
||||
return userId.equals(id.userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = siteId.hashCode();
|
||||
result = 31 * result + userId.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@EmbeddedId
|
||||
Id id;
|
||||
|
||||
private BAccessLevel accessLevel;
|
||||
|
||||
@ManyToOne(optional=false)
|
||||
private final BSite site;
|
||||
|
||||
@ManyToOne(optional=false)
|
||||
private final BUser user;
|
||||
|
||||
|
||||
public BSiteUser(BAccessLevel accessLevel, BSite site, BUser user) {
|
||||
this.accessLevel = accessLevel;
|
||||
this.site = site;
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public Id getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Id id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public BAccessLevel getAccessLevel() {
|
||||
return accessLevel;
|
||||
}
|
||||
|
||||
public BSite getSite() {
|
||||
return site;
|
||||
}
|
||||
|
||||
public BUser getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setAccessLevel(BAccessLevel accessLevel) {
|
||||
this.accessLevel = accessLevel;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.avaje.tests.model.bridge;
|
||||
|
||||
import javax.persistence.Embeddable;
|
||||
import javax.persistence.EmbeddedId;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.ManyToOne;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
public class BSiteUserB {
|
||||
|
||||
@Embeddable
|
||||
public static class Id {
|
||||
|
||||
// Use plain site and user matching by property name (not siteId, userId)
|
||||
public UUID site;
|
||||
public UUID user;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
Id id = (Id) o;
|
||||
if (!site.equals(id.site)) return false;
|
||||
return user.equals(id.user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = site.hashCode();
|
||||
result = 31 * result + user.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@EmbeddedId
|
||||
Id id;
|
||||
|
||||
private BAccessLevel accessLevel;
|
||||
|
||||
@ManyToOne(optional=false)
|
||||
private final BSite site;
|
||||
|
||||
@ManyToOne(optional=false)
|
||||
private final BUser user;
|
||||
|
||||
|
||||
public BSiteUserB(BAccessLevel accessLevel, BSite site, BUser user) {
|
||||
this.accessLevel = accessLevel;
|
||||
this.site = site;
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public Id getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Id id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public BAccessLevel getAccessLevel() {
|
||||
return accessLevel;
|
||||
}
|
||||
|
||||
public BSite getSite() {
|
||||
return site;
|
||||
}
|
||||
|
||||
public BUser getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setAccessLevel(BAccessLevel accessLevel) {
|
||||
this.accessLevel = accessLevel;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.avaje.tests.model.bridge;
|
||||
|
||||
import javax.persistence.Embeddable;
|
||||
import javax.persistence.EmbeddedId;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
public class BSiteUserC {
|
||||
|
||||
@Embeddable
|
||||
public static class Id {
|
||||
|
||||
// matching by @JoinColumn (not naming convention or property name)
|
||||
public UUID siteUid;
|
||||
public UUID userUid;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
Id id = (Id) o;
|
||||
if (!siteUid.equals(id.siteUid)) return false;
|
||||
return userUid.equals(id.userUid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = siteUid.hashCode();
|
||||
result = 31 * result + userUid.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@EmbeddedId
|
||||
Id id;
|
||||
|
||||
private BAccessLevel accessLevel;
|
||||
|
||||
@ManyToOne(optional=false)
|
||||
@JoinColumn(name = "site_uid", insertable = false, updatable = false)
|
||||
private final BSite site;
|
||||
|
||||
@ManyToOne(optional=false)
|
||||
@JoinColumn(name = "user_uid", insertable = false, updatable = false)
|
||||
private final BUser user;
|
||||
|
||||
|
||||
public BSiteUserC(BAccessLevel accessLevel, BSite site, BUser user) {
|
||||
this.accessLevel = accessLevel;
|
||||
this.site = site;
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public Id getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Id id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public BAccessLevel getAccessLevel() {
|
||||
return accessLevel;
|
||||
}
|
||||
|
||||
public BSite getSite() {
|
||||
return site;
|
||||
}
|
||||
|
||||
public BUser getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setAccessLevel(BAccessLevel accessLevel) {
|
||||
this.accessLevel = accessLevel;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.avaje.tests.model.bridge;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
public class BUser {
|
||||
|
||||
@Id
|
||||
UUID id;
|
||||
|
||||
String name;
|
||||
|
||||
public BUser(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.avaje.tests.model.bridge;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class TestExplicitM2MBridgeTable extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
BUser user = new BUser("Rob");
|
||||
BSite site = new BSite("avaje.org");
|
||||
|
||||
Ebean.save(user);
|
||||
Ebean.save(site);
|
||||
|
||||
insertUpdateBridge(user, site);
|
||||
insertUpdateBridgeB(user, site);
|
||||
insertUpdateBridgeC(user, site);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test where matching by db column naming convention.
|
||||
*/
|
||||
private void insertUpdateBridge(BUser user, BSite site) {
|
||||
|
||||
BSiteUser access = new BSiteUser(BAccessLevel.ONE, site, user);
|
||||
Ebean.save(access);
|
||||
|
||||
access.setAccessLevel(BAccessLevel.TWO);
|
||||
Ebean.save(access);
|
||||
|
||||
List<BSiteUser> list = Ebean.find(BSiteUser.class).findList();
|
||||
assertThat(list).isNotEmpty();
|
||||
|
||||
for (BSiteUser bridge : list) {
|
||||
assertThat(bridge.getId().siteId).isEqualTo(bridge.getSite().id);
|
||||
assertThat(bridge.getId().userId).isEqualTo(bridge.getUser().id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test where matching by property name.
|
||||
*/
|
||||
private void insertUpdateBridgeB(BUser user, BSite site) {
|
||||
|
||||
BSiteUserB access = new BSiteUserB(BAccessLevel.ONE, site, user);
|
||||
Ebean.save(access);
|
||||
|
||||
access.setAccessLevel(BAccessLevel.TWO);
|
||||
Ebean.save(access);
|
||||
|
||||
List<BSiteUserB> list = Ebean.find(BSiteUserB.class).findList();
|
||||
assertThat(list).isNotEmpty();
|
||||
|
||||
for (BSiteUserB bridge : list) {
|
||||
assertThat(bridge.getId().site).isEqualTo(bridge.getSite().id);
|
||||
assertThat(bridge.getId().user).isEqualTo(bridge.getUser().id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test where matching by explicit @JoinColumn.
|
||||
*/
|
||||
private void insertUpdateBridgeC(BUser user, BSite site) {
|
||||
|
||||
BSiteUserC access = new BSiteUserC(BAccessLevel.ONE, site, user);
|
||||
Ebean.save(access);
|
||||
|
||||
access.setAccessLevel(BAccessLevel.TWO);
|
||||
Ebean.save(access);
|
||||
|
||||
List<BSiteUserC> list = Ebean.find(BSiteUserC.class).findList();
|
||||
assertThat(list).isNotEmpty();
|
||||
|
||||
for (BSiteUserC bridge : list) {
|
||||
assertThat(bridge.getId().siteUid).isEqualTo(bridge.getSite().id);
|
||||
assertThat(bridge.getId().userUid).isEqualTo(bridge.getUser().id);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user