至少在过去的6个小时里,我一直在不停地胡闹,而我只是不明白问题是什么。我在SpringBoot项目中设置了两个类(User和Item),并且两个类之间存在双向关系,如下所示:
这是我的User类:
estimators[i].predict(X)
这是我的Item类(使用复合主键):
@Data
@Entity
@AllArgsConstructor
@Table(name="users")
public class User implements Serializable {
@Id
private @NotNull String id;
private @NotNull String username;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.owner", cascade = CascadeType.ALL)
private List<Item> ownedItems;
...
}
问题是由Hibernate创建的表(由SQL查询“ SHOW CREATE TABLE items”返回是这样的:
@Data
@Entity
@AllArgsConstructor
@Table(name="items")
public class Item implements Serializable {
@Data
@Embeddable
public static class PrimaryKey implements Serializable {
private @NotNull String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name="user_id",
referencedColumnName = "id",
foreignKey = @ForeignKey(name = "FK_Item_UserID"),
nullable = false, // I have tried using these
updatable = false, // and excluding these and
insertable = false // that changes nothing
)
private @NotNull User owner;
}
@EmbeddedId
private @NotNull PrimaryKey pk;
private @NotNull String name, item_condition, categories;
private @NotNull LocalDateTime postDate;
}
请注意,外键引用只是一个键,而不是一个外来键。下一个问题是它对更新或删除不执行任何操作,这是一个很大的问题。 我希望该表的外键显示为:
CREATE TABLE `items` (
`id` varchar(255) NOT NULL,
`categories` varchar(255) NOT NULL,
`item_condition` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`post_date` datetime NOT NULL,
`user_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`,`user_id`),
KEY `FK_Item_UserID` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
任何人都可以向我解释如何实现这一目标以及为什么我所拥有的无法正常工作吗?
答案 0 :(得分:0)
已解决
@danblack告诉我,我需要将引擎更改为“ Innodb”。我是通过将spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
添加到我的application.properties
文件中来实现的。
感谢@danblack!