With this class definition:
package ru.focusmedia.odp.server.datastore.jpa.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PostLoad;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import ru.focusmedia.odp.server.datastore.api.objects.OdpObjectRecord;
@SuppressWarnings("serial")
@Entity
@Table(name = "objects", uniqueConstraints = { @UniqueConstraint(columnNames
= {
"name", "parent_id" }) })
public class OdpObjectEntity implements Serializable, OdpObjectRecord {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
@ManyToOne
@JoinColumn(name = "parent_id")
private OdpObjectEntity parent;
@ManyToOne
@JoinColumn(name = "object_class_id", nullable = false)
private OdpObjectClassEntity objectClass;
@Column(nullable = false)
private boolean initialDataReceived;
protected OdpObjectEntity() {
// for JPA
}
public OdpObjectEntity(OdpObjectEntity parent, String name,
OdpObjectClassEntity objectClass) {
this.parent = parent;
this.name = name;
this.objectClass = objectClass;
}
@Override
public Long getId() {
return this.id;
}
@Override
public OdpObjectClassEntity getObjectClass() {
return objectClass;
}
@Override
public String getName() {
return this.name;
}
@Override
public OdpObjectEntity getParent() {
return parent;
}
@Override
public String toString() {
return "OdpObjectEntity [id=" + id + ", name=" + name
+ ", objectClass=" + objectClass + "]";
}
@PostLoad
public void ensureInitialized() {
getParent();
}
@Override
public boolean isInitialDataReceived() {
return initialDataReceived;
}
public void setInitialDataReceived(boolean initialDataReceived) {
this.initialDataReceived = initialDataReceived;
}
}
OpenJPA generates
CREATE TABLE objects -- OdpObjectEntity (id BIGINT NOT NULL,
initial_data_received SMALLINT NOT NULL, name VARCHAR(255) NOT NULL,
object_class_id BIGINT NOT NULL, parent_id BIGINT NOT NULL, PRIMARY
KEY
(id), CONSTRAINT U_OBJECTS_NAME UNIQUE (name, parent_id))
I didn't expect "NOT NULL" for parent_id there. How can I avoid it? I tried
setting `columnDefinition = "BIGINT"` in parent's @Column annotation without
result. Of course, I can just not set unique constraints in the entity and
add them separately later...
--
View this message in context:
http://openjpa.208410.n2.nabble.com/Why-is-NOT-NULL-generated-for-UniqueConstraint-tp7580309.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.