- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个房间实体、一个规则实体和一个便利设施实体。我想要做的是预先手动填充规则和便利设施实体,当我插入房间时,我希望根据用户选择的规则和便利设施将两者映射到两个连接表 room_rules 和 room_amenities 中。
我应该如何实现这个目标?当我保留一个新的房间实体时,它是否应该已经包含规则和便利设施?如果这些集合没有映射为cascade.persist,它会起作用吗?
或者我应该首先保留没有它们的房间,然后将它们映射到房间?
我应该做什么?
更新
我的房间实体:
public class RoomEntity {
@Id
@GeneratedValue(strategy= GenerationType.SEQUENCE)
@Column(name = "id", nullable =false, unique = true)
private Integer id;
@Basic
@Column(name = "title", nullable = false, length = 45)
private String title;
@Basic
@Column(name = "description", nullable = false, length = 300)
private String description;
@Basic
@Column(name = "square_meters", nullable = false)
private Integer square_meters;
@Basic
@Column(name = "overnight_price", nullable = false)
private double overnight_price;
@Basic
@Column(name = "exta_person_price", nullable = false)
private double exta_person_price;
@Basic
@Column(name = "max_people", nullable = false)
private Integer max_people;
@Basic
@Column(name = "min_overnights", nullable = false)
private Integer min_overnights;
@Basic
@Column(name = "beds", nullable = false)
private Integer beds;
@Basic
@Column(name = "bathrooms", nullable = false)
private Integer bathrooms;
@Basic
@Column(name = "bedrooms", nullable = false)
private Integer bedrooms;
@Basic
@Column(name = "transport", length = 300)
private String transport;
@Basic
@Column(name = "neightborhood", length = 300)
private String neightborhood;
@Basic
@Column(name = "house_rules", length = 200)
private String house_rules;
@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "room_host", referencedColumnName = "username", /*nullable = false,*/ insertable = false, updatable = false)
private HostEntity hostEntity;
public HostEntity getHostEntity() {
return hostEntity;
}
public void setHostEntity(HostEntity hostEntity) {
this.hostEntity = hostEntity;
}
@OneToOne
@JoinColumn(name = "room_type_id", referencedColumnName = "id", /*nullable = false,*/ insertable = false, updatable = false)
private TypeEntity typeEntity;
public TypeEntity getTypeEntity() {
return typeEntity;
}
public void setTypeEntity(TypeEntity typeEntity) {
this.typeEntity = typeEntity;
}
@OneToOne(cascade={CascadeType.ALL})
@JoinColumn(name = "room_location", referencedColumnName = "id"/*, nullable = false, insertable = false, updatable = false*/)
private LocationEntity locationEntity;
public LocationEntity getLocationEntity() {
return locationEntity;
}
public void setLocationEntity(LocationEntity locationEntity) {
this.locationEntity = locationEntity;
}
@OneToMany(cascade = {CascadeType.ALL})
@JoinTable(
/*name = "room_pictures",*/
joinColumns = {@JoinColumn(name = "room_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn (name ="picture_id", referencedColumnName = "id", unique = true)}
)
private Collection<PictureEntity> pictureEntities = new ArrayList<>();
public Collection<PictureEntity> getPictureEntities() {
return pictureEntities;
}
public void setPictureEntities(Collection<PictureEntity> pictureEntities) {
this.pictureEntities = pictureEntities;
}
@OneToMany
@JoinTable(
/*name = "room_amenities",*/
joinColumns = {@JoinColumn(name = "room_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn (name ="amenity_id", referencedColumnName = "id")}
)
private Collection<AmenitiesEntity> amenitiesEntities = new ArrayList<>();
public Collection<AmenitiesEntity> getAmenitiesEntities() {
return amenitiesEntities;
}
public void setAmenitiesEntities(Collection<AmenitiesEntity> amenitiesEntities) {
this.amenitiesEntities = amenitiesEntities;
}
@OneToMany
@JoinTable(
/*name = "room_amenities",*/
joinColumns = {@JoinColumn(name = "room_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn (name ="rule_id", referencedColumnName = "id")}
)
private Collection<RuleEntity> ruleEntities = new ArrayList<>();
public Collection<RuleEntity> getRuleEntities() {
return ruleEntities;
}
public void setRuleEntities(Collection<RuleEntity> ruleEntities) {
this.ruleEntities = ruleEntities;
}
public Collection<Picture> toPicturesModel(){
Collection<Picture> pictures = new ArrayList<>();
for(PictureEntity o : this.pictureEntities){
pictures.add(o.toModel());
}
return pictures;
}
public Collection<Amenities> toAmenitiesModel(){
Collection<Amenities> amenities = new ArrayList<>();
for(AmenitiesEntity o : this.amenitiesEntities){
amenities.add(o.toModel());
}
return amenities;
}
public Collection<Rule> toRulesModel(){
Collection<Rule> rules = new ArrayList<>();
for(RuleEntity o : this.ruleEntities){
rules.add(o.toModel());
}
return rules;
}
public Room toModel(Integer depth){
System.out.println("RoomEntity:::toModel()");
return new Room(
this.hostEntity == null? null : this.hostEntity.toModel(depth),
this.getTypeEntity() == null? null : this.typeEntity.toModel(),
this.getLocationEntity()== null? null : this.locationEntity.toModel(),
this.getPictureEntities() == null ? null : this.toPicturesModel(),
this.getAmenitiesEntities() == null? null : this.toAmenitiesModel(),
this.getRuleEntities() == null? null : this.toRulesModel(),
this.title, this.description, this.square_meters,
this.overnight_price, this.exta_person_price,
this.max_people, this.min_overnights, this.beds, this.bathrooms,
this.bedrooms, this.transport, this.neightborhood, this.house_rules);
}
}
我的HostEntity从RenterEntity继承主键用户名:
public class HostEntity extends RenterEntity {
@Basic
@Column(name = "about", length = 200)
private String about;
@Basic
@Column(name = "confirmed", nullable = false)
private boolean confirmed;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "hostEntity")
private Collection<RoomEntity> roomEntities;
public Collection<RoomEntity> getRoomEntities() {
return roomEntities;
}
public void setRoomEntities(Collection<RoomEntity> roomEntities) {
this.roomEntities = roomEntities;
}
我的位置实体:
public class LocationEntity{
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@Column(name = "id", nullable =false, unique = true)
private Integer id;
@Basic
@Column(name = "latitude", nullable = false, precision = 0)
private double latitude;
@Basic
@Column(name = "longitude", nullable = false, precision = 0)
private double longitude;
@Basic
@Column(name = "street_number", length = STREET_MAX)
private String street_number;
@Basic
@Column(name= "route", length = ROUTE_MAX)
private String route;
@Basic
@Column(name = "locality", length = LOCALITY_MAX)
private String locality;
@Basic
@Column(name = "postal_code", length = POSTAL_CODE_MAX)
private String postal_code;
@Basic
@Column(name = "country", length = COUNTRY_MAX)
private String country;
@Basic
@Column(name = "administrative_area_level_5", length = ADMINISTRATIVE_AREA_LEVEL_MAX)
private String administrative_area_level_5;
@Basic
@Column(name = "administrative_area_level_4", length = ADMINISTRATIVE_AREA_LEVEL_MAX)
private String administrative_area_level_4;
@Basic
@Column(name = "administrative_area_level_3", length = ADMINISTRATIVE_AREA_LEVEL_MAX)
private String administrative_area_level_3;
@Basic
@Column(name = "administrative_area_level_2", length = ADMINISTRATIVE_AREA_LEVEL_MAX)
private String administrative_area_level_2;
@Basic
@Column(name = "administrative_area_level_1", length = ADMINISTRATIVE_AREA_LEVEL_MAX)
private String administrative_area_level_1;
@Basic
@Column(name = "formatted_address", length = FORMATTED_ADRESS_MAX, nullable = false, unique = true)
private String formatted_address;
}
我的类型实体:
public class TypeEntity {
@Id
@Column(name = "id", nullable = false, unique = true)
private Integer id;
@Basic
@Column(name = "type_name", nullable = false, length = 45)
private String type;
@OneToOne(mappedBy = "typeEntity")
private RoomEntity roomEntity;
}
我的规则实体:
public class RuleEntity {
@Id
@Column(name = "id", nullable =false, unique = true)
//@GeneratedValue(strategy= GenerationType.SEQUENCE)
private Integer id;
@Basic
@Column(name = "rule", nullable =false , unique = true, length = 50)
private String rule;
}
我的图片实体:
public class PictureEntity {
@Id
@Column(name = "id", nullable =false, unique = true)
@GeneratedValue(strategy= GenerationType.SEQUENCE)
private Integer picture_id;
@Basic
@Column(name = "thumbnail_url", nullable =false, length = 100)
private String thumbnail_url;
@Basic
@Column(name = "medium_url", nullable =false, length = 100)
private String medium_url;
@Basic
@Column(name = "picture_url", nullable =false, length = 100)
private String picture_url;
@Basic
@Column(name = "xl_picture_url", nullable =false, length = 100)
private String xl_picture_url;
}
我的设施实体:
public class AmenitiesEntity {
@Id
@Column(name = "id", nullable =false, unique = true)
//@GeneratedValue(strategy= GenerationType.SEQUENCE)
private Integer id;
@Basic
@Column(name = "name", nullable = false, unique = true, length = 50)
private String amenity;
}
我创建房间的代码是这样的:
public Room addRoom(RoomInput room) {
dao.setParam("username", room.getOwner());
List<HostEntity> owner = dao.getTuples("users.findByUsername");
RoomEntity newRoom = new RoomEntity(room.getTitle(), room.getDescription(), room.getSquare_meters(), room.getOvernight_price(),
room.getExta_person_price(), room.getMax_people(), room.getMin_overnights(), room.getBeds(), room.getBathrooms(),
room.getBedrooms(), room.getTransport(), room.getNeightborhood(), room.getHouse_rules());
newRoom.setLocationEntity(room.getLocation().toEntity());
for(Picture o :room.getPictures()){
newRoom.getPictureEntities().add(o.toEntity());
}
RoomEntity entity = dao.insertTuple(newRoom);
entity.setHostEntity(owner.get(0));
for(Amenities o : room.getAmenities()){
entity.getAmenitiesEntities().add(o.toEntity());
}
for(Rule o : room.getRules()){
entity.getRuleEntities().add(o.toEntity());
}
entity.setTypeEntity(room.getType().toEntity());
entity = dao.updateTuple(entity);
System.out.println(entity.toString());
return (entity == null) ? null : entity.toModel(0);
}
现在发生的情况是,即使我有 3 个连接表,room_pictures、room_rules、room_amenities 得到正确更新,我放入数据库的房间有主机的外键(用户名)并且类型(id)为空。
有更好的方法来完成这一切吗?现在我第一次坚持新房间,级联保留图片和位置,然后我将房间与更新的主机、设施和规则的新值合并。
最佳答案
更新我解决了这个问题。现在,我为我想要保留的房间(又名位置和图片)的实体进行一项插入,并进行一项合并以连接连接表中的分离实体便利设施/规则,并在房间表中托管/键入外键。主机和类型的问题是我在 @JoinColumn 可更新和可插入中设置为 false,这是错误的。我删除这些语句后,它起作用了!我最终保存/合并分离的实体和新实体的代码是这样的:
public Room addRoom(RoomInput room) {
dao.setParam("username", room.getOwner());
HostEntity host = null;
List<HostEntity> owner = dao.getTuples("users.findByUsername");
RoomEntity newRoom = new RoomEntity(room.getTitle(), room.getDescription(), room.getSquare_meters(), room.getOvernight_price(),
room.getExta_person_price(), room.getMax_people(), room.getMin_overnights(), room.getBeds(), room.getBathrooms(),
room.getBedrooms(), room.getTransport(), room.getNeightborhood(), room.getHouse_rules());
System.out.println(owner.get(0).toString());
newRoom.setLocationEntity(room.getLocation().toEntity());
for(Picture o :room.getPictures()){
newRoom.getPictureEntities().add(o.toEntity());
}
RoomEntity entity = dao.insertTuple(newRoom);
for(Amenities o : room.getAmenities()){
entity.getAmenitiesEntities().add(o.toEntity());
}
for(Rule o : room.getRules()){
entity.getRuleEntities().add(o.toEntity());
}
entity.setHostEntity(owner.get(0));
entity.setTypeEntity(room.getType().toEntity());
dao.updateTuple(entity);
System.out.println(entity.toString());
return (entity == null) ? null : entity.toModel(0);
}
关于mysql - Jpa一对多使用连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44683903/
目前我正在构建相当大的网络系统,我需要强大的 SQL 数据库解决方案。我选择 Mysql 而不是 Postgres,因为一些任务需要只读(MyISAM 引擎)而其他任务需要大量写入(InnoDB)。
我在 mysql 中使用如下命令。当它显示表格数据时,它被格式化为一个非常干净的表格,间距均匀且 |作为列分隔符。 SELECT * FROM TABLE_NAME; 当我从 CLI 运行命令时,如下
我知道这个问题之前已经被问过好几次了,我已经解决了很多问题,但到目前为止没有任何效果。 MySQL 试图将自身安装到的目录 (usr/local/mysql) 肯定有问题。关于我的错误的奇怪之处在于我
以下是我的 SQL 数据结构,我正在尝试如下两个查询: Select Wrk_ID, Wrk_LastName, Skill_Desc from Worker, Skill where
我们有一个本地 mysql 服务器(不在公共(public)域上),并希望将该服务器复制到我们拥有的 google 云 sql 实例。我的问题是:1.这可能吗?2.我们的本地服务器只能在本地网络上访问
我有一个表(test_table),其中一些字段值(例如字段 A、B 和 C)是从外部应用程序插入的,还有一个字段(字段 D),我想从现有表(store_table)插入其值,但在插入前者(A、B 和
我想创建一个 AWS RDS 实例,然后使用 terraform 管理数据库用户。因此,首先,我创建了一个 RDS 实例,然后使用创建的 RDS 实例初始化 mysql 提供程序,以进一步将其用于用户
当用户在我的网站上注册时,他们会在我的一个数据库中创建自己的表格。该表存储用户发布的所有帖子。我还想做的是也为他们生成自己的 MySql 用户——该用户仅有权从他们的表中读取、写入和删除。 创建它应该
我有一个关于 ColdFusion 和 Mysql 的问题。我有两个表:PRODUCT 和 PRODUCT_CAT。我想列出包含一些标记为:IS_EXTRANET=1 的特殊产品的类别。所以我写了这个
我想获取 recipes_id 列的值,以获取包含 ingredient_id 的 2,17 和 26 条目的值。 假设 ingredient_id 2 丢失则不获取记录。 我已经尝试过 IN 运算符
在 Ubuntu 中,我通常安装两者,但 MySQL 的客户端和服务器之间有什么区别。 作为奖励,当一个新语句提到它需要 MySQL 5.x 时,它是指客户端、服务器还是两者兼而有之。例如这个链接ht
我重新访问了我的数据库并注意到我有一些 INT 类型的主键。 这还不够独特,所以我想我会有一个指导。 我来自微软 sql 背景,在 ssms 中你可以 选择类型为“uniqeidentifier”并自
我的系统上有 MySQL,我正在尝试确定它是 Oracle MySQL 还是 MySQL。 Oracle MySQL 有区别吗: http://www.oracle.com/us/products/m
我是在生产 MySQL 中运行的应用程序的新维护者。之前的维护者已经离开,留下的文档很少,而且联系不上了。 我面临的问题是执行以下请求大约需要 10 秒: SELECT COUNT(*) FROM `
我有两个位于不同机器上的 MySQL 数据库。我想自动将数据从一台服务器传输到另一台服务器。比方说,我希望每天早上 4:00 进行数据传输。 可以吗?是否有任何 MySQL 内置功能可以让我们做到这一
有什么方法可以使用 jdbc 查询位于 mysql 根目录之外的目录中的 mysql 表,还是必须将它们移动到 mysql 根目录内的数据库文件夹中?我在 Google 上搜索时没有找到任何东西。 最
我在 mysql 数据库中有两个表。成员和 ClassNumbers。两个表都有一个付费年份字段,都有一个代码字段。我想用代码数字表中的值更新成员表中的付费年份,其中成员中的代码与 ClassNumb
情况:我有 2 台服务器,其中一台当前托管一个实时 WordPress 站点,我希望能够将该站点转移到另一台服务器,以防第一台服务器出现故障。传输源文件很容易;传输数据库是我需要弄清楚如何做的。两台服
Phpmyadmin 有一个功能是“复制数据库到”..有没有mysql查询来写这个函数?类似于将 db A 复制到新的 db B。 最佳答案 首先创建复制数据库: CREATE DATABASE du
我有一个使用 mySQL 作为后端的库存软件。我已经在我的计算机上对其进行了测试,并且运行良好。 当我在计算机上安装我的软件时,我必须执行以下步骤: 安装 mySQL 服务器 将用户名指定为“root
我是一名优秀的程序员,十分优秀!