Сопоставьте java.sql.Type с несколькими varchar / различными полями - PullRequest
1 голос
/ 09 мая 2019

В моем приложении 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. Это возможно или я хватаюсь за соломинку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...