问题描述
我正在两个 JPA 类中建立多对多关系以关联用户及其对应的类,我必须使用 MongoDB,但无法进行正确的转换。
我的类 Usuario (JPA) 它包含 getter 和 setter 以及 serialVersionUID,我没有放它们,因为它太长了:
@Entity
@Table(name = "usuarios")
public class Usuario implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true,length = 20)
private String username;
@Column(length = 100)
private String password;
private Boolean enabled;
@Column(unique = true,length = 30)
private String phone;
private String nombre;
private String apellido;
@Column(unique = true,length = 100)
private String email;
private String ubicacion;
private String intereses;
private Integer intentos;
private String llave;
private String token;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "usuarios_roles",joinColumns = @JoinColumn(name = "usuario_id"),inverseJoinColumns = @JoinColumn(name = "role_id"),uniqueConstraints = {
@UniqueConstraint(columnNames = { "usuario_id","role_id" }) })
private List<Role> roles;
mongodb UsuarioDb 中的对应物(我不知道如何更改@JoinTable 使其在 mongo 中工作相同,它包含 getter 和 setter、toString 和 serialVersionUID,我没有放它们,因为它太长了) :
@Document(collection = "Usuarios")
public class UsuarioDb implements Serializable {
@Transient
public static final String SEQUENCE_NAME = "users_sequence";
@Id
private Long id;
@Indexed(unique=true)
private String username;
private String password;
private Boolean enabled;
@Indexed(unique=true)
private String phone;
private String nombre;
private String apellido;
@Indexed(unique=true)
private String email;
private String ubicacion;
private String intereses;
private Integer intentos;
private String llave;
private String token;
@DBRef(lazy = true)
@JoinTable(name = "usuarios_roles","role_id" }) })
private List<RoleDb> roles;
类角色 (JPA):
@Entity
@Table(name = "roles")
public class Role implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true,length = 30)
private String nombre;
类 RoleDB (MongoDb):
@Document(collection = "roles")
public class RoleDb implements Serializable {
@Transient
public static final String SEQUENCE_NAME = "users_sequence";
@Id
private Long id;
@Indexed(unique=true)
private String nombre;
@Service
public class SequenceGeneratorService {
private MongoOperations mongoOperations;
@Autowired
public SequenceGeneratorService(MongoOperations mongoOperations) {
this.mongoOperations = mongoOperations;
}
public long generateSequence(String seqName) {
DatabaseSequence counter = mongoOperations.findAndModify(query(where("_id").is(seqName)),new Update().inc("seq",1),options().returnNew(true).upsert(true),DatabaseSequence.class);
return !Objects.isNull(counter) ? counter.getSeq() : 1;
}
}
和一个监听器类:
@Component
public class usermodelListener extends AbstractMongoEventListener<UsuarioDb> {
private SequenceGeneratorService sequenceGenerator;
@Autowired
public usermodelListener(SequenceGeneratorService sequenceGenerator) {
this.sequenceGenerator = sequenceGenerator;
}
@Override
public void onBeforeConvert(BeforeConvertEvent<UsuarioDb> event) {
if (event.getSource().getId() < 1) {
event.getSource().setId(sequenceGenerator.generateSequence(UsuarioDb.SEQUENCE_NAME));
}
}
}
我需要帮助才能使过渡正确
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)