自定义标识符生成器 returns 空
Custom IdentifierGenerator returns null
所以,我想用 IdentifierGenerator 为“FriendID”自定义 ID,我想先让它尽可能简单,以确保它能正常工作。一直在看教程和代码示例,但我无法让它工作,即使它看起来很简单......可能是我错过了什么?
它似乎没有到达策略参数中的 GenFriendID-class,因为生成器 class 名称是灰色的并且显示“Class 'GenFriendID'从未使用过”。路径应该是正确的,并一直在尝试将它们移动到同一个包等等。
也一直在尝试删除数据库并根据更改重新运行数据库的创建(之前是 GenerationType.AUTO)
实体 class,
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 的生成器 class,
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;
}
}
returns 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());
}
}
如果您需要查看任何其他代码,请告诉我,我会更新 post!
提前致谢!
如果您将实体写入数据库,Id 生成将起作用
如果你执行简单
friendID = new FriendID();
它不会工作
使用 EntityManager.merge
od spring 将 friendID
保存到数据库,然后保存的对象应该生成 id
所以,我想用 IdentifierGenerator 为“FriendID”自定义 ID,我想先让它尽可能简单,以确保它能正常工作。一直在看教程和代码示例,但我无法让它工作,即使它看起来很简单......可能是我错过了什么?
它似乎没有到达策略参数中的 GenFriendID-class,因为生成器 class 名称是灰色的并且显示“Class 'GenFriendID'从未使用过”。路径应该是正确的,并一直在尝试将它们移动到同一个包等等。
也一直在尝试删除数据库并根据更改重新运行数据库的创建(之前是 GenerationType.AUTO)
实体 class,
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 的生成器 class,
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;
}
}
returns 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());
}
}
如果您需要查看任何其他代码,请告诉我,我会更新 post! 提前致谢!
如果您将实体写入数据库,Id 生成将起作用
如果你执行简单
friendID = new FriendID();
它不会工作
使用 EntityManager.merge
od spring 将 friendID
保存到数据库,然后保存的对象应该生成 id