So I am wanting to delete a hibernate 3-way join table entity that I have setup in my project but I keep getting an exception... here is the class I use to map the data into:
Code:
@javax.persistence.Entity(name = "notify_group")
@AssociationOverrides({
@AssociationOverride(name = "pk.process", joinColumns = @JoinColumn(name = "process_id", referencedColumnName = "id", nullable = false)),
@AssociationOverride(name = "pk.severity", joinColumns = @JoinColumn(name = "severity_id", referencedColumnName = "id", nullable = false)),
@AssociationOverride(name = "pk.group", joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id", nullable = false))
})
@SuppressWarnings("serial")
public class NotifyGroupJoinEntity extends EntityJoin {
@Embeddable
public static class PrimaryKey implements EntityPrimaryKey {
ProcessEntity process;
SeverityEntity severity;
LdapBridgeGroupEntity group;
public PrimaryKey() {}
public PrimaryKey(ProcessEntity process, SeverityEntity severity,
LdapBridgeGroupEntity group) {
setProcess(process);
setSeverity(severity);
setGroup(group);
}
@ManyToOne
public ProcessEntity getProcess() {
return process;
}
public void setProcess(ProcessEntity process) {
this.process = process;
}
@ManyToOne
public SeverityEntity getSeverity() {
return severity;
}
public void setSeverity(SeverityEntity severity) {
this.severity = severity;
}
@ManyToOne
public LdapBridgeGroupEntity getGroup() {
return group;
}
public void setGroup(LdapBridgeGroupEntity group) {
this.group = group;
}
@Transient
public List<Entity> getEntities() {
List<Entity> objects = new ArrayList<>();
if(process != null)
objects.add(process);
if(severity != null)
objects.add(severity);
if(group != null)
objects.add(group);
return objects;
}
@Override
public boolean equals(Object o) {
return equals(o, false);
}
public boolean equals(Object o, boolean wildcard) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PrimaryKey that = (PrimaryKey) o;
if(wildcard) {
boolean wildCheck = false;
if(process != null && that.process != null) {
if(process.equals(that.process)) wildCheck = true; else wildCheck = false;
}
if(severity != null && that.severity != null) {
if(severity.equals(that.severity)) wildCheck = true; else wildCheck = false;
}
if(group != null && that.group != null) {
if(group.equals(that.group)) wildCheck = true; else wildCheck = false;
}
return wildCheck;
}
if (process != null ? !process.equals(that.process) : that.process != null) return false;
if (severity != null ? !severity.equals(that.severity) : that.severity != null) return false;
if (group != null ? !group.equals(that.group) : that.group != null) return false;
return true;
}
@Override
public int hashCode() {
int result;
result = (process != null ? process.getId() : 0);
result = 31 * result + (severity != null ? severity.getId() : 0);
result = 31 * result + (group != null ? group.getId() : 0);
return result;
}
}
private PrimaryKey pk = new PrimaryKey();
@EmbeddedId
public PrimaryKey getPk() {
return pk;
}
public void setPk(PrimaryKey pk) {
this.pk = pk;
}
@Override
@Transient
public int getId() {
return getPk().hashCode();
}
public void setId(int id) {}
public NotifyGroupJoinEntity() {}
public NotifyGroupJoinEntity(ProcessEntity process) {
this(process, null);
}
public NotifyGroupJoinEntity(ProcessEntity process, SeverityEntity severity) {
this(process, severity, null);
}
public NotifyGroupJoinEntity(ProcessEntity process, SeverityEntity severity,
LdapBridgeGroupEntity group) {
setProcess(process);
setSeverity(severity);
setGroup(group);
}
@Transient
public String getCollectionGetter() {
return "getNotifyGroupJoins";
}
@Transient
public ProcessEntity getProcess() {
return getPk().getProcess();
}
public void setProcess(ProcessEntity process) {
getPk().setProcess(process);
}
@Transient
public SeverityEntity getSeverity() {
return getPk().getSeverity();
}
public void setSeverity(SeverityEntity severity) {
getPk().setSeverity(severity);
}
@Transient
public LdapBridgeGroupEntity getGroup() {
return getPk().getGroup();
}
public void setGroup(LdapBridgeGroupEntity group) {
getPk().setGroup(group);
}
@Transient
public List<Entity> getEntities() {
return getPk().getEntities();
}
@Override
public boolean equals(Object o) {
return equals(o, false);
}
public boolean equals(Object o, boolean wildcard) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
IncidentJoinCauseEntity that = (IncidentJoinCauseEntity) o;
if (getPk() != null ? !getPk().equals(that.getPk(), wildcard)
: that.getPk() != null)
return false;
return true;
}
@Override
public int hashCode() {
return (getPk() != null ? getPk().hashCode() : 0);
}
}
This works for everything but deleting. I use this Dao method for deleting the class object above:
Code:
@Override
public <E extends Entity> void delete(Class<E> clazz, Serializable id) {
Session session = getCurrentSession();
Query query = session.createQuery("delete from " + clazz.getName() + " entity where entity.id = :id");
query.setSerializable("id", id);
query.setCacheable(true);
try {
query.executeUpdate();
}
catch(SerializationException ex) {
ex.printStackTrace();
}
}
Then I call this method like this:
Code:
hibernateDao.delete(NotifyGroupJoinEntity.class, joinEntity.getPk());
This is the exception I receive when I make this call in my tests:
Quote:
org.hibernate.exception.GenericJDBCException: could not execute update query
...
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The value is not set for the parameter number 2.
I'm not sure what it is that I'm doing wrong here and would appreciate any help I can get! Thanks for taking the time to read through this issue.
http://stackoverflow.com/questions/29066126/deleting-a-hibernate-3-way-join-entity-without-using-a-hashset