У меня есть два объекта. Data_mart и entity_data. entity_data расширяет data_mart. У меня столбец id как в data_mart, так и в entity_data. data_id в сущности mart является начальным ключом data_mart (Pkey over is id).Проблема с выпуском HQL
@Entity
@Table(name = "data_mart")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type")
public class DataMaster {
/** The id. */
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(unique = true, nullable = false)
private Long id;
/** The type. */
private String type;
/** The created by. */
private String createdBy;
.....
}
@Entity
@Table(name = "entity_data")
@PrimaryKeyJoinColumn(name = "dataId")
@DiscriminatorValue("FILE")
@Where(clause = "active = '1'")
public class EntityData extends DataMaster {
/** The data id. */
@Column(insertable = false, updatable = false)
private Long dataId;
/** The delimiter. */
private String delimiter;
....
}
И структура таблицы из дочерней таблицы выглядит следующим образом
CREATE TABLE entity_data (
id bigint(20) NOT NULL AUTO_INCREMENT,
data_id bigint(20) NOT NULL,
delimiter varchar(20) DEFAULT NULL,
file_path `varchar(200) DEFAULT NULL,
...
)
Когда я пытаюсь обновить таблицу entity_data с запросом HQL, ниже промежуточный запрос формируется Hibernate
create temporary table if not exists HT_entity_data (id bigint not null);
insert into HT_entity_data
select entitydata0_.data_id as data_id from entity_data
entitydata0_ inner join data_master entitydata0_1_ on
entitydata0_.data_id=entitydata0_1_.id where entitydata0_.file_path='abcdd'
update entity_data set file_path='new_path'
where (id) IN (select data_id from HT_entity_data)
Приведенный выше запрос дает неверные результаты. в предложении where вышеупомянутого оператора обновления, id идет. Должно быть, data_id.
Я не мог понять, как это принято ???
Как вы могли видеть, базовый класс не имеет столбца id. Но соответствующая таблица имеет столбец в имени id. –