Java MySQL';s on update now()在通过Hibernate更新时为一个表工作,而不为另一个表工作
当Hibernate进行更新查询时,我无法让MySQL在更新当前时间戳时更新标记为当前时间戳的时间戳字段Java MySQL';s on update now()在通过Hibernate更新时为一个表工作,而不为另一个表工作,java,mysql,database,hibernate,database-administration,Java,Mysql,Database,Hibernate,Database Administration,当Hibernate进行更新查询时,我无法让MySQL在更新当前时间戳时更新标记为当前时间戳的时间戳字段 CREATE TABLE `homes` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userId_fk` int(11) NOT NULL, `type_fk` varchar(45) NOT NULL, `summary` varchar(255) DEFAULT NULL, `created` timestamp NOT NUL
CREATE TABLE `homes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userId_fk` int(11) NOT NULL,
`type_fk` varchar(45) NOT NULL,
`summary` varchar(255) DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `fk_homes_users` (`userId_fk`),
KEY `fk_homes_homeTypes_idx` (`type_fk`),
CONSTRAINT `fk_homes_homeTypes` FOREIGN KEY (`type_fk`) REFERENCES `homeTypes` (`type`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_homes_users` FOREIGN KEY (`userId_fk`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE `addresses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`street` varchar(45) DEFAULT NULL,
`city` varchar(45) NOT NULL,
`province` varchar(45) DEFAULT NULL,
`postcode` varchar(45) NOT NULL,
`country` varchar(45) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `fk_addresses_countries_idx` (`country`),
CONSTRAINT `fk_addresses_countries` FOREIGN KEY (`country`) REFERENCES `countries` (`iso3166_alpha3`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
根据和,MySQL应该处理具有多个列的表,默认值为CURRENT\u TIMESTAMP
。我的问题是,当使用Hibernate更新实体时,这似乎适用于一个表,但不适用于同一模式中的另一个表。另外,当我直接对DB运行更新时(不使用Hibernate),它对所有表都可以正常工作
第二个表addresses的更新列随每次更新而正确更改。第一个没有。我正在使用MySQL 5.7和Hibernate 4.3.11
我的实体:
@Entity
@Table(name = "homes")
public class Home {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotNull
@Column(name = "userId_fk", nullable = false)
private Integer userId;
@OneToOne(cascade = ALL)
@JoinTable(name = "homes_addresses", joinColumns = @JoinColumn(name = "homeId_fk"),
inverseJoinColumns = @JoinColumn(name = "addressId_fk"))
private Address address;
@Enumerated(EnumType.STRING)
@Column(name = "type_fk") // TODO nullable = false ?
private HomeType type;
private String summary;
private LocalDateTime created;
private LocalDateTime updated;
}
@Entity
@Table(name = "addresses")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String street;
@NotNull
private String city;
private String province;
@NotNull
private String postcode;
@NotNull
private String country;
private LocalDateTime created;
private LocalDateTime updated;
}
更新时不触发的查询示例:
Hibernate:
/* update
xxx.xxx.Home */ update
homes
set
created=?,
summary=?,
type_fk=?,
updated=?,
userId_fk=?,
videoLink=?
where
id=?
您运行的更新查询是什么?也请发布。@SameerMirji感谢您的评论,我刚刚注意到只有当查询来自常规日志上的HibernateTurn时才会发生这种情况,以查看Hibernate发送到MySQL的所有命令。然后张贴那些;也许Hibernate正在做一些事情来阻止更新。