В моем приложении java / hibernate есть встроенный класс, который я хочу сопоставить с 3 полями базы данных как типом (чтобы я мог использовать его как CustomVersionType). На данный момент я получаю ошибку
org.hibernate.MappingException: отображение свойств имеет неправильный номер
столбцы: com.imsproto.model.RuleOfEngagementCI.contextIdentifier тип:
com.imsproto.usertypes.ContextualisedIdentifierVersionType
Если честно, я не уверен, что картирование решит проблему, но я хотел бы попробовать. Насколько я могу видеть, сценарии, в которых кто-то расширяет диалект и добавляет пользовательское сопоставление, относятся к тем случаям, когда в базе данных фактически есть не отображенный тип (примеры, которые я видел, могут быть устаревшими, но включают поля UUID и json). В этом случае я хочу сопоставить составной тип с 3 полями. Это структура стола ...
//Standard hibernate code
@Embeddable
public class TestType implements Serializable
{
@Transient
public Class getUnderlyingClass() { return TestType.class;}
@Column(name="`id1`", nullable=false, length = 100)
private java.lang.String id1 = UUID.randomUUID().toString();
@Column(name="`id2`", nullable=false, length = 100)
private java.lang.String id2;
@Column(name="`id3`", nullable=false, length = 100)
public java.lang.String getId1() {
return id1;
}
public void setId1(java.lang.String value) {
this.id1= value;
}
public int compareTo(TestType b) {
if (Id1.equals(b.Id1)) {
return 0;
} else {
return -1;
}
}
}
@Entity
@Table (name="`hib_test`")
public class HibernateTest implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="seq-gen", sequenceName="seq", allocationSize=1)
@GeneratedValue (strategy=GenerationType.SEQUENCE, generator="seq-gen")
@Column(name="`id`", nullable=false)
private Long id;
@Column(name="`NAME`", length=100)
private String name;
@Type(type = "com.proto.usertypes.TestType")
@Version
@Embedded
@AttributeOverrides({
@AttributeOverride(name="id1", column=@Column(name="`id1_in_testtype`"))
,@AttributeOverride(name="id2", column=@Column(name="`id2_in_testtype`"))
,@AttributeOverride(name="id3", column=@Column(name="`id3_in_testtype`"))
})
private TestType testType;
public TestType getTestType() {
return testType;
}
...
}
То, что я хочу сделать, это отобразить TestType как тип, чтобы он рассматривал его как составной тип данных. Этот тип при добавлении будет доступен через перечисление Java.sql.Types. Это возможно или я хватаюсь за соломинку?