[英]Hibernate @OneToOne Not Mapping
Error : 错误 :
org.hibernate.AnnotationException: Unknown mappedBy in: com.catalyst.User.Model.Person.User, referenced property unknown: com.catalyst.User.Model.User.User_ID org.hibernate.AnnotationException:未知映射方式:com.catalyst.User.Model.Person.User,引用属性未知:com.catalyst.User.Model.User.User_ID
I'm trying to create a OneToOne relationship without success. 我正在尝试创建一个OneToOne关系,但没有成功。 What am I doing wrong? 我究竟做错了什么?
User.java User.java
package com.catalyst.User.Model;
import javax.persistence.CascadeType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
@Entity(name = "User" )
@Table(name = "dbo.Users")
public class User
{
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO)
private int ID;
@Column(name="Username")
private String Username;
@Column(name="Password")
private String Password;
@Column(name="Active")
private int Active;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Person hPerson;
public User()
{
// Hibernate Needs This
}
public User(String argUsername, String argPassword, int argActive)
{
this.Username = argUsername;
this.Password = argPassword;
this.Active = argActive;
}
public Person getPerson()
{
return(hPerson);
}
public String getUsername()
{
return(Username);
}
public String getPassword()
{
return(Password);
}
public int getActive()
{
return(Active);
}
public void setUsername(String argUsername)
{
this.Username = argUsername;
}
public void setPassword(String argPassword)
{
this.Password = argPassword;
}
public void setActive(int argActive)
{
this.Active = argActive;
}
}
Person.java 人.java
package com.catalyst.User.Model;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
/*
Person Model
*/
@Entity(name = "Person" )
@Table(name = "dbo.Person")
public class Person
{
@Id
@GeneratedValue(generator = "foreigngen")
@GenericGenerator(strategy = "foreign", name="foreigngen",parameters = @Parameter(name = "property", value="user"))
@Column(name = "ID")
private int ID;
@Column(name="FName")
private String Firstname;
@Column(name="LName")
private String Lastname;
@Column(name="Address")
private String Address;
@Column(name="Email")
private String Email;
@OneToOne(mappedBy = "user")
private User User;
@Column(name="Role_Id")
private int RoleID;
public Person()
{
// Hibernate Needs This
}
public Person(String argFName, String argLName, String argAddress, String argEmail, int argRoleID)
{
this.Firstname = argFName;
this.Lastname = argLName;
this.Address = argAddress;
this.Email = argEmail;
this.RoleID = argRoleID;
}
public int getID()
{
return(ID);
}
public String getFirstname()
{
return(Firstname);
}
public String getLastname()
{
return(Lastname);
}
public String getFullname()
{
return(Firstname + " " + Lastname);
}
public String getAddress()
{
return(Address);
}
public String getEmail()
{
return(Email);
}
public User getUser()
{
return(User);
}
public int getRoleID()
{
return(RoleID);
}
public void setID(int arg)
{
this.ID = arg;
}
public void setFirstname(String arg)
{
this.Firstname = arg;
}
public void setLastname(String arg)
{
this.Lastname = arg;
}
public void setAddress(String arg)
{
this.Address = arg;
}
public void setEmail(String arg)
{
this.Email = arg;
}
public void setUserID(User arg)
{
this.User = arg;
}
public void setRoleID(int arg)
{
this.RoleID = arg;
}
}
Database Dump 数据库转储
USE [master]
GO
/****** Object: Database [APP] Script Date: 6/23/2015 1:56:37 PM ******/
CREATE DATABASE [APP]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'APP', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\APP.mdf' , SIZE = 4096KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'APP_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\APP_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [APP] SET COMPATIBILITY_LEVEL = 110
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [APP].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [APP] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [APP] SET ANSI_NULLS OFF
GO
ALTER DATABASE [APP] SET ANSI_PADDING OFF
GO
ALTER DATABASE [APP] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [APP] SET ARITHABORT OFF
GO
ALTER DATABASE [APP] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [APP] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [APP] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [APP] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [APP] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [APP] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [APP] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [APP] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [APP] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [APP] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [APP] SET DISABLE_BROKER
GO
ALTER DATABASE [APP] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [APP] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [APP] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [APP] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [APP] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [APP] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [APP] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [APP] SET RECOVERY FULL
GO
ALTER DATABASE [APP] SET MULTI_USER
GO
ALTER DATABASE [APP] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [APP] SET DB_CHAINING OFF
GO
ALTER DATABASE [APP] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
GO
ALTER DATABASE [APP] SET TARGET_RECOVERY_TIME = 0 SECONDS
GO
USE [APP]
GO
/****** Object: Table [dbo].[AssociatedProcedure] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[AssociatedProcedure](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Type] [varchar](50) NOT NULL,
[Devices_ID] [int] NULL,
[MicSupply_ID] [int] NOT NULL,
[Drugs_ID] [int] NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_AssociatedProcedure] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Devices] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Devices](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DevicesType] [varchar](50) NOT NULL,
[Cost] [decimal](18, 0) NOT NULL,
[DeviceAge] [int] NOT NULL,
[Active] [bit] NOT NULL,
[Max Age] [int] NOT NULL,
CONSTRAINT [PK_Devices] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Drugs] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Drugs](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DrugType] [varchar](50) NOT NULL,
[DrugCost] [decimal](18, 0) NOT NULL,
[Amount] [int] NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_Drugs] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[HIstory] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[HIstory](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Schedule_ID] [int] NULL,
[Active] [bit] NULL,
[Pet_ID] [int] NULL,
[Actice] [bit] NULL,
CONSTRAINT [PK_HIstory] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[MicSupply] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[MicSupply](
[ID] [int] IDENTITY(1,1) NOT NULL,
[SupplyType] [varchar](50) NOT NULL,
[Count] [int] NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_MicSupply] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Person] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Person](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FName] [varchar](50) NOT NULL,
[LName] [varchar](50) NOT NULL,
[Address] [varchar](50) NOT NULL,
[Email] [varchar](50) NOT NULL,
[User_ID] [int] NOT NULL,
[Role_Id] [int] NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_Person_1] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Pet] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Pet](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Prerson_ID] [int] NULL,
[Name] [varchar](50) NULL,
[Weight] [nchar](10) NULL,
[Age] [bigint] NULL,
[PetType] [varchar](50) NULL,
[Active] [bit] NULL,
CONSTRAINT [PK_Pet] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Procedure] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Procedure](
[ID] [int] IDENTITY(1,1) NOT NULL,
[AssociatedProcedure_ID] [int] NULL,
[Cost] [decimal](18, 0) NOT NULL,
[Devices_ID] [int] NOT NULL,
[Drugs_ID] [int] NOT NULL,
[MicSupply_ID] [int] NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_Procedure] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Role] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Role](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Role] [varchar](50) NOT NULL,
[Active] [bit] NULL,
CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Schedule] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Schedule](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Date] [datetime] NULL,
[Procedure_ID] [int] NULL,
[Pet_ID] [int] NULL,
[Vet_ID] [int] NULL,
[Devices_ID] [int] NULL,
[Cost] [decimal](18, 0) NULL,
[Services_ID] [int] NULL,
[Active] [bit] NULL,
[History_ID] [int] NULL,
CONSTRAINT [PK_Schedule] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Services] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Services](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Type] [varchar](50) NOT NULL,
[Cost] [decimal](18, 0) NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_Services] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[User] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[User](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Username] [varchar](50) NOT NULL,
[Password] [varchar](50) NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Vets] Script Date: 6/23/2015 1:56:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Vets](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Role_ID] [int] NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_Vets] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[AssociatedProcedure] ON
INSERT [dbo].[AssociatedProcedure] ([ID], [Type], [Devices_ID], [MicSupply_ID], [Drugs_ID], [Active]) VALUES (14, N'Wrap', 2, 3, 2, 1)
INSERT [dbo].[AssociatedProcedure] ([ID], [Type], [Devices_ID], [MicSupply_ID], [Drugs_ID], [Active]) VALUES (15, N'stich', NULL, 3, 4, 1)
SET IDENTITY_INSERT [dbo].[AssociatedProcedure] OFF
SET IDENTITY_INSERT [dbo].[Devices] ON
INSERT [dbo].[Devices] ([ID], [DevicesType], [Cost], [DeviceAge], [Active], [Max Age]) VALUES (1, N'Xray', CAST(100 AS Decimal(18, 0)), 3, 1, 101)
INSERT [dbo].[Devices] ([ID], [DevicesType], [Cost], [DeviceAge], [Active], [Max Age]) VALUES (2, N'Table', CAST(50 AS Decimal(18, 0)), 1, 1, 122)
INSERT [dbo].[Devices] ([ID], [DevicesType], [Cost], [DeviceAge], [Active], [Max Age]) VALUES (3, N'Light', CAST(25 AS Decimal(18, 0)), 5, 1, 133)
SET IDENTITY_INSERT [dbo].[Devices] OFF
SET IDENTITY_INSERT [dbo].[Drugs] ON
INSERT [dbo].[Drugs] ([ID], [DrugType], [DrugCost], [Amount], [Active]) VALUES (1, N'Epoch', CAST(4 AS Decimal(18, 0)), 200, 1)
INSERT [dbo].[Drugs] ([ID], [DrugType], [DrugCost], [Amount], [Active]) VALUES (2, N'dg health hemorrhoidal', CAST(3 AS Decimal(18, 0)), 300, 1)
INSERT [dbo].[Drugs] ([ID], [DrugType], [DrugCost], [Amount], [Active]) VALUES (3, N'Sertraline Hydrochloride', CAST(4 AS Decimal(18, 0)), 100, 1)
INSERT [dbo].[Drugs] ([ID], [DrugType], [DrugCost], [Amount], [Active]) VALUES (4, N'ibuprofen', CAST(2 AS Decimal(18, 0)), 200, 1)
INSERT [dbo].[Drugs] ([ID], [DrugType], [DrugCost], [Amount], [Active]) VALUES (5, N'Hydromorphone HCl', CAST(5 AS Decimal(18, 0)), 500, 1)
SET IDENTITY_INSERT [dbo].[Drugs] OFF
SET IDENTITY_INSERT [dbo].[HIstory] ON
INSERT [dbo].[HIstory] ([ID], [Schedule_ID], [Active], [Pet_ID], [Actice]) VALUES (4, 4, 1, 4, 1)
INSERT [dbo].[HIstory] ([ID], [Schedule_ID], [Active], [Pet_ID], [Actice]) VALUES (6, 5, 1, 3, 1)
SET IDENTITY_INSERT [dbo].[HIstory] OFF
SET IDENTITY_INSERT [dbo].[MicSupply] ON
INSERT [dbo].[MicSupply] ([ID], [SupplyType], [Count], [Active]) VALUES (1, N'tape', 6, 1)
INSERT [dbo].[MicSupply] ([ID], [SupplyType], [Count], [Active]) VALUES (2, N'glue', 7, 1)
INSERT [dbo].[MicSupply] ([ID], [SupplyType], [Count], [Active]) VALUES (3, N'glove', 3, 1)
INSERT [dbo].[MicSupply] ([ID], [SupplyType], [Count], [Active]) VALUES (4, N'broom', 2, 1)
INSERT [dbo].[MicSupply] ([ID], [SupplyType], [Count], [Active]) VALUES (5, N'bleach', 8, 1)
SET IDENTITY_INSERT [dbo].[MicSupply] OFF
SET IDENTITY_INSERT [dbo].[Person] ON
INSERT [dbo].[Person] ([ID], [FName], [LName], [Address], [Email], [User_ID], [Role_Id], [Active]) VALUES (4, N'Timothy', N'Stewart', N'476 Kedzie Drive', N'tstewart0@soup.io', 1, 3, 1)
INSERT [dbo].[Person] ([ID], [FName], [LName], [Address], [Email], [User_ID], [Role_Id], [Active]) VALUES (6, N'David', N'Hath', N'92990 Sutherland Crossing', N'hbryant9@europa.eu', 2, 1, 1)
INSERT [dbo].[Person] ([ID], [FName], [LName], [Address], [Email], [User_ID], [Role_Id], [Active]) VALUES (7, N'Nick', N'Tacey', N'242 Oakridge Street', N'achavez1@g.co', 3, 1, 1)
INSERT [dbo].[Person] ([ID], [FName], [LName], [Address], [Email], [User_ID], [Role_Id], [Active]) VALUES (8, N'Nick', N'Duncan', N'853 Mariners Cove Trail', N'ariley8@forbes.com', 4, 1, 1)
INSERT [dbo].[Person] ([ID], [FName], [LName], [Address], [Email], [User_ID], [Role_Id], [Active]) VALUES (10, N'James', N'Blair', N'1234', N'happy', 5, 1, 1)
INSERT [dbo].[Person] ([ID], [FName], [LName], [Address], [Email], [User_ID], [Role_Id], [Active]) VALUES (12, N'Anne', N'Chavez', N'242 Oakridge Street', N'achavez1@g.co', 6, 2, 1)
INSERT [dbo].[Person] ([ID], [FName], [LName], [Address], [Email], [User_ID], [Role_Id], [Active]) VALUES (16, N'Christine', N'Carroll', N'4 Hintze Center', N'ccarroll2@wikipedia.org', 7, 5, 1)
INSERT [dbo].[Person] ([ID], [FName], [LName], [Address], [Email], [User_ID], [Role_Id], [Active]) VALUES (17, N'Jonathan', N'George', N'07067 Pawling Lane', N'jgeorge3@fda.gov', 8, 4, 1)
SET IDENTITY_INSERT [dbo].[Person] OFF
SET IDENTITY_INSERT [dbo].[Pet] ON
INSERT [dbo].[Pet] ([ID], [Prerson_ID], [Name], [Weight], [Age], [PetType], [Active]) VALUES (2, 6, N'Peter', N'3 ', 4, N'dog', 1)
INSERT [dbo].[Pet] ([ID], [Prerson_ID], [Name], [Weight], [Age], [PetType], [Active]) VALUES (3, 9, N'Phyllis', N'2 ', 7, N'cat', 1)
INSERT [dbo].[Pet] ([ID], [Prerson_ID], [Name], [Weight], [Age], [PetType], [Active]) VALUES (4, 9, N'Heather', N'4 ', 21, N'dog', 1)
INSERT [dbo].[Pet] ([ID], [Prerson_ID], [Name], [Weight], [Age], [PetType], [Active]) VALUES (5, 10, N'Patricia', N'14 ', 1, N'cat', 1)
SET IDENTITY_INSERT [dbo].[Pet] OFF
SET IDENTITY_INSERT [dbo].[Procedure] ON
INSERT [dbo].[Procedure] ([ID], [AssociatedProcedure_ID], [Cost], [Devices_ID], [Drugs_ID], [MicSupply_ID], [Active]) VALUES (1, NULL, CAST(400 AS Decimal(18, 0)), 2, 2, 1, 1)
INSERT [dbo].[Procedure] ([ID], [AssociatedProcedure_ID], [Cost], [Devices_ID], [Drugs_ID], [MicSupply_ID], [Active]) VALUES (2, 14, CAST(600 AS Decimal(18, 0)), 3, 4, 1, 1)
INSERT [dbo].[Procedure] ([ID], [AssociatedProcedure_ID], [Cost], [Devices_ID], [Drugs_ID], [MicSupply_ID], [Active]) VALUES (4, NULL, CAST(300 AS Decimal(18, 0)), 1, 5, 2, 1)
SET IDENTITY_INSERT [dbo].[Procedure] OFF
SET IDENTITY_INSERT [dbo].[Role] ON
INSERT [dbo].[Role] ([ID], [Role], [Active]) VALUES (1, N'Admin', 1)
INSERT [dbo].[Role] ([ID], [Role], [Active]) VALUES (2, N'Vet', 1)
INSERT [dbo].[Role] ([ID], [Role], [Active]) VALUES (3, N'Vet Tec', 1)
INSERT [dbo].[Role] ([ID], [Role], [Active]) VALUES (4, N'Divice Tec', 1)
INSERT [dbo].[Role] ([ID], [Role], [Active]) VALUES (5, N'Employe', 1)
SET IDENTITY_INSERT [dbo].[Role] OFF
SET IDENTITY_INSERT [dbo].[Schedule] ON
INSERT [dbo].[Schedule] ([ID], [Date], [Procedure_ID], [Pet_ID], [Vet_ID], [Devices_ID], [Cost], [Services_ID], [Active], [History_ID]) VALUES (4, NULL, 1, 2, 1, 2, CAST(300 AS Decimal(18, 0)), 1, 1, 1)
INSERT [dbo].[Schedule] ([ID], [Date], [Procedure_ID], [Pet_ID], [Vet_ID], [Devices_ID], [Cost], [Services_ID], [Active], [History_ID]) VALUES (5, NULL, 2, 2, 2, 2, CAST(200 AS Decimal(18, 0)), 1, 1, 1)
SET IDENTITY_INSERT [dbo].[Schedule] OFF
SET IDENTITY_INSERT [dbo].[Services] ON
INSERT [dbo].[Services] ([ID], [Type], [Cost], [Active]) VALUES (1, N'Bath', CAST(50 AS Decimal(18, 0)), 1)
INSERT [dbo].[Services] ([ID], [Type], [Cost], [Active]) VALUES (2, N'Hair Cut', CAST(25 AS Decimal(18, 0)), 1)
INSERT [dbo].[Services] ([ID], [Type], [Cost], [Active]) VALUES (3, N'Brush Teeth', CAST(15 AS Decimal(18, 0)), 1)
SET IDENTITY_INSERT [dbo].[Services] OFF
SET IDENTITY_INSERT [dbo].[User] ON
INSERT [dbo].[User] ([ID], [Username], [Password], [Active]) VALUES (1, N'frank', N'happy', 1)
INSERT [dbo].[User] ([ID], [Username], [Password], [Active]) VALUES (2, N'dah', N'Teamprj', 1)
INSERT [dbo].[User] ([ID], [Username], [Password], [Active]) VALUES (3, N'nTacey', N'passy', 1)
INSERT [dbo].[User] ([ID], [Username], [Password], [Active]) VALUES (4, N'nDuncan', N'root', 1)
INSERT [dbo].[User] ([ID], [Username], [Password], [Active]) VALUES (5, N'happy', N'happy', 1)
INSERT [dbo].[User] ([ID], [Username], [Password], [Active]) VALUES (6, N'frank', N'tank', 1)
INSERT [dbo].[User] ([ID], [Username], [Password], [Active]) VALUES (7, N'sally', N'sue', 1)
INSERT [dbo].[User] ([ID], [Username], [Password], [Active]) VALUES (8, N'jon', N'jon', 1)
SET IDENTITY_INSERT [dbo].[User] OFF
SET IDENTITY_INSERT [dbo].[Vets] ON
INSERT [dbo].[Vets] ([ID], [Role_ID], [Active]) VALUES (1, 1, 1)
INSERT [dbo].[Vets] ([ID], [Role_ID], [Active]) VALUES (2, 3, 1)
INSERT [dbo].[Vets] ([ID], [Role_ID], [Active]) VALUES (3, 2, 1)
INSERT [dbo].[Vets] ([ID], [Role_ID], [Active]) VALUES (4, 1, 1)
SET IDENTITY_INSERT [dbo].[Vets] OFF
ALTER TABLE [dbo].[AssociatedProcedure] WITH CHECK ADD CONSTRAINT [FK_AssociatedProcedure_Devices] FOREIGN KEY([MicSupply_ID])
REFERENCES [dbo].[MicSupply] ([ID])
GO
ALTER TABLE [dbo].[AssociatedProcedure] CHECK CONSTRAINT [FK_AssociatedProcedure_Devices]
GO
ALTER TABLE [dbo].[AssociatedProcedure] WITH CHECK ADD CONSTRAINT [FK_AssociatedProcedure_Drugs] FOREIGN KEY([Drugs_ID])
REFERENCES [dbo].[Drugs] ([ID])
GO
ALTER TABLE [dbo].[AssociatedProcedure] CHECK CONSTRAINT [FK_AssociatedProcedure_Drugs]
GO
ALTER TABLE [dbo].[AssociatedProcedure] WITH CHECK ADD CONSTRAINT [FK_AssociatedProcedure_MicSupply] FOREIGN KEY([MicSupply_ID])
REFERENCES [dbo].[MicSupply] ([ID])
GO
ALTER TABLE [dbo].[AssociatedProcedure] CHECK CONSTRAINT [FK_AssociatedProcedure_MicSupply]
GO
ALTER TABLE [dbo].[HIstory] WITH CHECK ADD CONSTRAINT [FK_HIstory_Pet] FOREIGN KEY([Pet_ID])
REFERENCES [dbo].[Pet] ([ID])
GO
ALTER TABLE [dbo].[HIstory] CHECK CONSTRAINT [FK_HIstory_Pet]
GO
ALTER TABLE [dbo].[HIstory] WITH CHECK ADD CONSTRAINT [FK_HIstory_Schedule] FOREIGN KEY([Schedule_ID])
REFERENCES [dbo].[Schedule] ([ID])
GO
ALTER TABLE [dbo].[HIstory] CHECK CONSTRAINT [FK_HIstory_Schedule]
GO
ALTER TABLE [dbo].[Person] WITH CHECK ADD CONSTRAINT [FK_Person_User] FOREIGN KEY([User_ID])
REFERENCES [dbo].[User] ([ID])
GO
ALTER TABLE [dbo].[Person] CHECK CONSTRAINT [FK_Person_User]
GO
ALTER TABLE [dbo].[Procedure] WITH CHECK ADD CONSTRAINT [FK_Procedure_Devices] FOREIGN KEY([Devices_ID])
REFERENCES [dbo].[Devices] ([ID])
GO
ALTER TABLE [dbo].[Procedure] CHECK CONSTRAINT [FK_Procedure_Devices]
GO
ALTER TABLE [dbo].[Procedure] WITH CHECK ADD CONSTRAINT [FK_Procedure_Drugs] FOREIGN KEY([Drugs_ID])
REFERENCES [dbo].[Drugs] ([ID])
GO
ALTER TABLE [dbo].[Procedure] CHECK CONSTRAINT [FK_Procedure_Drugs]
GO
ALTER TABLE [dbo].[Procedure] WITH CHECK ADD CONSTRAINT [FK_Procedure_MicSupply] FOREIGN KEY([MicSupply_ID])
REFERENCES [dbo].[MicSupply] ([ID])
GO
ALTER TABLE [dbo].[Procedure] CHECK CONSTRAINT [FK_Procedure_MicSupply]
GO
ALTER TABLE [dbo].[Schedule] WITH CHECK ADD CONSTRAINT [FK_Schedule_Devices] FOREIGN KEY([Devices_ID])
REFERENCES [dbo].[Devices] ([ID])
GO
ALTER TABLE [dbo].[Schedule] CHECK CONSTRAINT [FK_Schedule_Devices]
GO
ALTER TABLE [dbo].[Schedule] WITH CHECK ADD CONSTRAINT [FK_Schedule_Pet] FOREIGN KEY([Pet_ID])
REFERENCES [dbo].[Pet] ([ID])
GO
ALTER TABLE [dbo].[Schedule] CHECK CONSTRAINT [FK_Schedule_Pet]
GO
ALTER TABLE [dbo].[Schedule] WITH CHECK ADD CONSTRAINT [FK_Schedule_Procedure] FOREIGN KEY([Procedure_ID])
REFERENCES [dbo].[Procedure] ([ID])
GO
ALTER TABLE [dbo].[Schedule] CHECK CONSTRAINT [FK_Schedule_Procedure]
GO
ALTER TABLE [dbo].[Schedule] WITH CHECK ADD CONSTRAINT [FK_Schedule_Vets] FOREIGN KEY([Vet_ID])
REFERENCES [dbo].[Vets] ([ID])
GO
ALTER TABLE [dbo].[Schedule] CHECK CONSTRAINT [FK_Schedule_Vets]
GO
ALTER TABLE [dbo].[Vets] WITH CHECK ADD CONSTRAINT [FK_Vets_Role] FOREIGN KEY([Role_ID])
REFERENCES [dbo].[Role] ([ID])
GO
ALTER TABLE [dbo].[Vets] CHECK CONSTRAINT [FK_Vets_Role]
GO
USE [master]
GO
ALTER DATABASE [APP] SET READ_WRITE
GO
The mappedBy attribute in your @OneToOne in class Person, should point to class User's reference to Person which you've declared as "hPerson". 您在@OneToOne类中的Person中的mappingBy 属性应指向类User对您已声明为“ hPerson”的Person的引用。
public class Person
{
...
@OneToOne(mappedBy = "user")
private User User;
should be 应该
...
@OneToOne(mappedBy = "hPerson")
private User User;
As declared, you're saying that User owns the relationship with Person. 如所声明的,您是说用户拥有与Person的关系。
According to the JavaDocs for @OneToOne
there are two use cases for having a one-to-one relationship between two normal (ie, not embedded or component) entity classes: 根据@OneToOne
的JavaDocs,在两个普通(即非嵌入式或组件)实体类之间具有一对一关系的使用案例有两种:
Case 1 : The two classes share the primary key. 情况1 :这两个类共享主键。 This is modeled as: 建模为:
@Entity
class User {
@Id
private Long id;
@OneToOne
private Person person;
}
@Entity
class Person {
@Id
private Long id;
@OneToOne
private User user;
}
Depending on the business rules of the domain and the class model, other optional information may be added, such as @OneToOne(optional = true)
or @OneToOne @MapsId
(see the JavaDocs for details). 根据域和类模型的业务规则,可能会添加其他可选信息,例如@OneToOne(optional = true)
或@OneToOne @MapsId
(有关详细信息,请参阅JavaDocs)。 However, this basic model works. 但是,此基本模型有效。
Case 2 : The two classes have a logical one-to-one relationship through foreign keys. 情况2 :这两个类通过外键具有逻辑一对一的关系。 This is modeled as: 建模为:
@Entity
class User {
@Id
private Long id;
@OneToOne
@JoinColumn(name = "person_id")
private Person person;
}
@Entity
class Person {
@Id
private Long id;
@OneToOne(mappedBy = "person")
@JoinColumn(name = "user_id")
private User user;
}
In this case, the owned
entity must declare how the owner
entity refers to its instances by including the mappedBy
attribute on @OneToOne
. 在这种情况下, owned
实体必须通过在@OneToOne
上包含mappedBy
属性来声明owner
实体如何引用其实例。 In the example above, it is assumed that User
is the owner of the relationship and Person
is the owned entity (thereby requiring mappedBy
on the Person
side). 在上面的示例中,假设User
是关系的所有者, Person
是拥有的实体(因此要求在Person
端使用mappedBy
)。
Comparing the two examples, it can be seen that modeling the one-to-one relationship using a foreign key column requires the use of a @JoinColumn
annotation on the side that has the foreign key. 比较两个示例,可以看出,使用外键列对一对一关系进行建模需要在具有外键的一侧使用@JoinColumn
批注。
What you have is a hybrid of these two cases. 您所拥有的是这两种情况的混合体。 In your entity model, User
does not have a foreign key column to Person
but Person
does have a foreign key column back to the User
. 在你的实体模型, User
没有一个外键列到Person
,但Person
确实有一个外键列回User
。 Therefore, the simplest model can be developed by using User
definition from the first example above and Person
definition from the second example: 因此,可以使用上面第一个示例中的User
定义和第二个示例中的Person
定义来开发最简单的模型:
@Entity
class User {
@Id
private Long id;
@OneToOne
private Person person;
}
@Entity
class Person {
@Id
private Long id;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
}
See classes User
and Person
in this sample app . 请参阅此示例应用程序中的 User
和Person
类。 You can run the associated JUnit test cases or check the CI build status to ensure that the associations are working correctly. 您可以运行关联的JUnit测试用例或检查CI的构建状态,以确保关联正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.