Need some help with mapping
mikedougherty Mar 28, 2007 2:42 PMOK, I would appreciate a little help with a mapping issue I am running into. I have what I will call a Type table. This table looks something like this:
+------------+--------------+ | Field | Type | +------------+--------------+ | TABLE_NAME | varchar(25) | | ITEM_ID | varchar(10) | | ITEM_FIELD | varchar(25) | | ITEM_VALUE | varchar(255) | +------------+--------------+
The TABLE_NAME, ITEM_ID, and ITEM_FIELD columns make up the primary key.
I have this table mapped to a Type object, with a TypePK @IdClass. This works fine.
However, what I need to do is map certain rows in this table to a field in another object. For example, if my STORE table looks like:
+------------+--------------+ | Field | Type | +------------+--------------+ | STORE_NAME | varchar(255) | | STORE_ID | varchar(10) | | STORE_TYPE_ID | varchar(25) | +------------+--------------+
The STORE_TYPE_ID value needs to be mapped to the ITEM_ID field in the TYPE table where TABLE_NAME = "STORE" and an ITEM_FIELD = "STORE_TYPE".
I've tried subclassing Type (with @Inheritance, and @DiscriminatorValue annotations) but that does not seem to be giving me the desired result.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="LIST_FIELD", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("STORE_TYPE")
public class StoreType extends Type {
}
entityManager.createQuery("select storeType from StoreType storeType");
Generates the following error:
Caused by: java.sql.SQLException: ORA-00942: table or view does not exist
Any ideas how I might be able to annotate these objects in order to get the result I am looking for?
@Entity
@Table(name = "STORE")
public class Store implements Serializable {
@Id
@Column(name = "STORE_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@OneToOne(mappedBy="id")
public StoreType getType() {
return type;
}
public void setType(StoreType type) {
this.type = type;
}
@Column(name = "STORE_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Thanks.