使用这个@GeneratedValue(strategy = GenerationType.IDENTITY)会影响删除功能吗
时间: 2023-12-29 14:05:57 浏览: 158
@GeneratedValue(strategy = GenerationType.IDENTITY) 不会直接影响删除功能。它只是用于指定主键生成策略,以便在插入新数据时自动生成主键值。如果你在删除数据时遇到问题,可能是由于其他原因引起的,例如外键约束或数据不存在等。建议仔细检查删除语句是否正确,以及表之间的关系是否设置正确,以找出原因。
相关问题
public class SC { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") int id; @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "sid") private Student student; @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "cid") private Course course; boolean ifRechose; }纠错
在SC类中,使用了@OneToMany注解来定义与Student和Course实体的一对多关系,但是这不符合实际情况,因为一个SC实体应该只与一个Student和一个Course实体关联,因此应该使用@ManyToOne注解来定义多对一的关系。另外,在SC实体中,存在一个ifRechose属性,但是没有提供getter和setter方法,可能会造成使用时的问题。
因此,可以对SC类进行如下修改:
```java
public class SC {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
int id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "sid")
private Student student;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cid")
private Course course;
@Column(name = "ifRechose")
boolean ifRechose;
public boolean isIfRechose() {
return ifRechose;
}
public void setIfRechose(boolean ifRechose) {
this.ifRechose = ifRechose;
}
// getter and setter for Student and Course
}
```
这样,就能正确地定义SC实体与Student和Course实体之间的多对一关系,同时提供ifRechose属性的getter和setter方法。
@Data @AllArgsConstructor @NoArgsConstructor @Builder @Table(name = "advert") public class Advert { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @ApiModelProperty(value = "广告唯一id") private Integer id; @ApiModelProperty(value = "广告名称") @NotBlank(message = "广告名称不可为空", groups = {AddGroup.class, UpdateGroup.class}) private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "position_id") private AdPosition position; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "media_id") private MediaFile media; } @Data @AllArgsConstructor @NoArgsConstructor @Builder @Table(name = "ad_position") public class AdPosition { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @ApiModelProperty(value = "位置名称") @NotBlank(message = "位置名称不可为空", groups = {AddGroup.class}) private String name; @OneToMany(mappedBy = "AdPosition", cascade = CascadeType.ALL) private List<Advert> adverts = new ArrayList<>(); } @Data @AllArgsConstructor @NoArgsConstructor @Builder @Table(name = "media_file") public class MediaFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @ApiModelProperty(value = "媒体文件名称") private String fileName; @ApiModelProperty(value = "媒体文件类型") private Integer fileType; @ApiModelProperty(value = "媒体文件URL地址") private String fileUrl; @OneToMany(mappedBy = "MediaFile", cascade = CascadeType.ALL) private List<Advert> adverts = new ArrayList<>(); } public interface MyBaseMapper<T> extends Mapper<T>, MySqlMapper<T>,MyInsertListMapper<T> {} public interface AdvertMapper extends MyBaseMapper<Advert> {},如何保存一个advert对象
保存一个`Advert`对象可以通过使用`AdvertMapper`中的方法来实现,具体步骤如下:
1. 创建一个`Advert`对象,并设置其属性值:
```
Advert advert = new Advert();
advert.setName("广告名称");
// 设置关联属性
AdPosition position = new AdPosition();
position.setId(1); // 假设要关联的AdPosition的id为1
advert.setPosition(position);
MediaFile media = new MediaFile();
media.setId(2); // 假设要关联的MediaFile的id为2
advert.setMedia(media);
```
2. 调用`AdvertMapper`中的保存方法进行保存:
```
@Autowired
private AdvertMapper advertMapper;
// 保存Advert对象
advertMapper.insert(advert);
```
在保存时,由于`AdPosition`和`MediaFile`实体类中的`adverts`属性都使用了`mappedBy`属性,因此不需要再手动设置关联关系的另一侧。
另外,如果需要同时保存多个`Advert`对象,可以将它们放在一个`List<Advert>`中,然后使用`MyInsertListMapper`中的`batchInsert`方法来进行批量保存,例如:
```
List<Advert> adverts = new ArrayList<>();
// 添加多个Advert对象到adverts列表中
advertMapper.batchInsert(adverts);
```
阅读全文