如果我想用多个列来组成一个ID。
SQL示例:
CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])
如何使用Jpa实体类来实现这个?通过columndefinition吗?只需将id字段设置为:
value = Column1 + Column2 + Column3 // aint working.
如果我想用多个列来组成一个ID。
SQL示例:
CONSTRAINT [PK_NAME] PRIMARY KEY ([Column1],[Column2],[Column3])
如何使用Jpa实体类来实现这个?通过columndefinition吗?value = Column1 + Column2 + Column3 // aint working.
你需要为你的复合键创建一个类:
public class CompositeKey implements Serializable {
private int column1;
private int column2;
private int column3;
}
然后在实体类中使用@IdClass
注解:
@Entity
@IdClass(CompositeKey.class)
public class EntityExample {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
...
...
}
我认为这应该可以工作。
还有另一个@jklee提到的解决方案。两个都可以,只是个人喜好而已。
使用 @Embeddable
和 @EmbeddedId
。
示例:
@Entity
public class Project implements Serializable {
@EmbeddedId ProjectId id;
}
@Embeddable
class ProjectId implements Serializable {
int departmentId;
long projectId;
}
更多信息请点击这里。
如果类中所有字段都是主键,则解决方案将很简单(扩展@raul-cuth所提供的解决方案):
@Entity
@IdClass(EntityExample.class)
public class EntityExample implements Serializable {
@Id
private int column1;
@Id
private int column2;
@Id
private int column3;
}
@Entity
类上的@IdClass
注释,后跟作为复合主键一部分的各个字段的@Id
注释。@Embeddable
类,其中可以包含复合主键的各个字段,然后可以在@Entity
类中使用带有@Embedded
注释的此类引用作为属性。
希望这可以帮助你。
EntityExampleRepository extends JpaRepository<EntityExample, ???>
会是什么样子? - Prasannjeet Singh