我这里有一个很奇怪的问题。我在实体中使用@IdClass
的复合主键。除保存外,它在每种情况下都可以正常工作。保存实体后,JPA不会触发SELECT
查询来选择插入的数据,也不会合并结果。尽管数据已成功保存到数据库中。也没有错误。以下是一些有助于调试问题的代码:
AbstractEntity.java
@MappedSuperclass
@IdClass(PrimaryKey.class)
public abstract class AbstractEntity implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -1191422925622832672L;
/** The id. */
private String id;
...
/**
* Gets the id.
*
* @return the id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public String getId() {
return id;
}
...
}
PrimaryKey.java
public class PrimaryKey implements Serializable {
/** The id. */
private String id;
/**
* Gets the id.
*
* @return the id
*/
@Column(name = "id")
@Convert(converter = CryptoConverter.class)
public String getId() {
return id;
}
...
}
User.java
@Entity
@Table(name = "user")
public class User extends AbstractEntity {
...
}
UserRepository.java
@Repository
public interface UserRepository extends CrudRepository<User, PrimaryKey> {
}
我在数据库中有BigInt autoIncrement
个ID作为主键。但是我想以加密的形式将其公开给外界,所以我使用@Converter
对其进行加密和解密。
当我从userRepository.save(userEntity)
调用UserService
时,它会保留数据,但不会从数据库返回生成的ID。
如何解决此问题?
编辑: 我已经托管了具有此功能here的演示项目。
答案 0 :(得分:0)
由于我在代码中看不到任何地方,因此需要指定Id
,策略类型和数据库上的列。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "applicant_id")