idがSQL Server db(スキーマを変更できないサードパーティのデータベース)で生成されたGUIDであるため、フィールドが定義されている;私は新しいエンティティを作成し、それを保存すると挿入された行を取得しようとすると挿入が失敗する
@Id
@GenericGenerator(name="generator", strategy="guid", parameters = {})
@GeneratedValue(generator ="generator")
@Column(name="FarmID")
public String getId() {
return id;
}
、IDが最初に正しくNEWID()を呼び出す GUIDGeneratorによって生成され、その行は、パラメータ値として生成されたIDを使用して挿入されています。ただし、挿入後、Hibernateは新しく挿入された行を取得しようとしますが、失敗し、ブランクのid値を使用していることが判明しました。ここにはトレースログがあります。
[main] AbstractBatcher DEBUG about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
[main] SQL DEBUG
select
newid()
[main] AbstractBatcher TRACE preparing statement
[main] GUIDGenerator DEBUG GUID identifier generated: 5B5495B4-FFE3-4112-B079-4FB799320BA7
[main] AbstractBatcher DEBUG about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
[main] AbstractBatcher TRACE closing statement
[main] ConnectionManager TRACE registering flush begin
[main] AbstractBatcher DEBUG about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
[main] SQL DEBUG
insert
into
Farm
(FarmBusinessID, FarmName, PortalFarm, FarmID)
values
(?, ?, ?, ?)
[main] AbstractBatcher TRACE preparing statement
[main] BasicBinder TRACE binding parameter [1] as [VARCHAR] - F2542B84-82E4-4DF6-BDBB-E830BFE5DDC1
[main] BasicBinder TRACE binding parameter [2] as [VARCHAR] - XXXXXX XXXXX (XXX)
[main] BasicBinder TRACE binding parameter [3] as [BIT] - true
[main] BasicBinder TRACE binding parameter [4] as [VARCHAR] - 5B5495B4-FFE3-4112-B079-4FB799320BA7
[main] AbstractBatcher DEBUG about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
[main] AbstractBatcher TRACE closing statement
[main] ConnectionManager TRACE registering flush end
[main] HQLQueryPlan TRACE find: select id from agronomy.model.hub.Farm where id = :id
[main] AbstractBatcher DEBUG about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
[main] SQL DEBUG
select
farm0_.FarmID as col_0_0_
from
Farm farm0_
where
farm0_.FarmID=?
[main] AbstractBatcher TRACE preparing statement
[main] BasicBinder TRACE binding parameter [1] as [VARCHAR] -
[main] AbstractBatcher DEBUG about to open ResultSet (open ResultSets: 0, globally: 0)
[main] AbstractBatcher DEBUG about to close ResultSet (open ResultSets: 1, globally: 1)
[main] AbstractBatcher DEBUG about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
[main] AbstractBatcher TRACE closing statement
[main] JDBCExceptionReporter WARN SQL Error: 8169, SQLState: S0002
[main] JDBCExceptionReporter ERROR Conversion failed when converting from a character string to uniqueidentifier.
私は明示的にその最後のSELECTを(それが失敗した)を呼び出すので、私は、私はそれが失敗している理由見るために見ることができる場所はわからないことを認識していませんよ。 SQLエラーは「空の文字列を一意識別子値として使用できません」という意味になります。