Java Oracle表序列生成器无法使用JPA复合主键

Java Oracle表序列生成器无法使用JPA复合主键,java,oracle,hibernate,jpa,Java,Oracle,Hibernate,Jpa,我的域类: @Entity @Table(name="ZZ_USER_INFO", schema="PDS_OWNER") public class User implements Serializable{ private static final long serialVersionUID = 1317056412866001134L; public User(){ } @EmbeddedId private UserPk userPk;

我的域类:

@Entity
@Table(name="ZZ_USER_INFO", schema="PDS_OWNER")
public class User implements Serializable{

    private static final long serialVersionUID = 1317056412866001134L;  
    public User(){

    }   
    @EmbeddedId
    private UserPk userPk;  

    @Column(name="AGE", nullable=false)
    private int userAge;

    public UserPk getUserPk() {
        return userPk;
    }

    public void setUserPk(UserPk userPk) {
        this.userPk = userPk;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

}

public class UserPk implements Serializable{

    private static final long serialVersionUID = 237150872186063319L;

        public UserPk(){

        }   

        @SequenceGenerator(name="ZZ_USER_INFO_SEQ", sequenceName="ZZ_USER_INFO_SEQ")
        @GeneratedValue(strategy = GenerationType.AUTO, generator="ZZ_USER_INFO_SEQ")
        @Column(name="USER_ID", nullable=false)
        private long userId;

        @Column(name="USER_NAME", nullable=false)
        private String userName;

        public long getUserId() {
            return userId;
        }

        public void setUserId(long userId) {
            this.userId = userId;
        }

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }   

    }
以下是我的测试方法:

@Test
public void testCreatUser_success(){
    User user = new User();     

    UserPk userPk = new UserPk();
    userPk.setUserName("User2");

    user.setUserPk(userPk);     
    user.setUserAge(30);

    userRepository.save(user);      
}
当我在@EmbeddedId中使用@SequenceGenerator with时,它在Oracle中不起作用。在表中,我看到USER_ID列中的默认值为零

当我改用@Id时,同样的代码也可以正常工作

有人能帮助我如何使用带有JPA@EmbeddedId(复合密钥)的Oracle sequecne生成器吗


感谢您的帮助。

如果您是自动生成PK值,那么为什么您需要合成?!自动生成的值是唯一的。至于它不起作用的原因,这就是为什么你有JPA提供者日志,其中会显示Sequences的任何用法。你可以将
@embeddeble
注释添加到
用户
类并尝试吗?@harshavmb类(
用户
)不能既是
@Entity
又是
@embeddeble
;当然,
UserPk
类应该是
@embedded
的,但是这在所有JPA文档中都存在,所以我们不得不假设它是一个复制粘贴错误,我的错。是,
UserPk
应该是可嵌入的。谢谢……)