因此,我想使用 IdentifierGenerator 為“FriendID”自定義 ID,并且我想首先使其盡可能簡單,以確保它正常作業。一直在看教程并查看代碼示例,但即使它看起來很簡單,我也無法讓它作業......這可能是我錯過的其他東西嗎?
它似乎沒有到達策略引數中的 GenFriendID 類,因為生成器類名稱是灰色的,并且顯示“從未使用類 'GenFriendID'”。路徑應該是正確的,并且一直在嘗試將它們移動到同一個包等等。
也一直在嘗試洗掉資料庫并根據更改重新運行資料庫的創建(之前是 GenerationType.AUTO)
物體類,
package com.WineOutBE.entity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "FriendID")
public class FriendID implements Serializable {
@Id
@GenericGenerator(name = "friend_id", strategy = "com.WineOutBE.generator.GenFriendID")
@GeneratedValue(generator = "friend_id")
@Column(name = "FriendID", unique = true, length = 6)
private Long friendid;
public Long getId() {
return friendid;
}
public void setId(Long FID) {
this.friendid = FID;
}
}
實作 IdentifierGenerator 的生成器類,
package com.WineOutBE.generator;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import java.io.Serializable;
public class GenFriendID implements IdentifierGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
return 1234L;
}
}
回傳 NULL 而不是 1234 的測驗方法,
package com.WineOutBE;
import com.WineOutBE.entity.FriendID;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class Testing {
FriendID friendID;
@Test
void checkCorrectIdValue(){
friendID = new FriendID();
assertEquals(1234L, friendID.getId());
}
}
如果您需要查看任何其他代碼,請告訴我,我會更新帖子!先感謝您!
uj5u.com熱心網友回復:
如果您將物體寫入 db,則 ID 生成將起作用
如果你執行簡單
friendID = new FriendID();
它不會作業
friendID使用例如od spring保存到資料庫,EntityManager.merge然后保存的物件應該生成 id
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/467753.html
